1

再会,

我正在尝试在 nasm 中使用模数运算符,但我一直收到错误消息......我想加密用户输入的字符串......所以加密必须在 26 个字母范围内......

例如,当加密值为 3 并且用户输入 'z' 时,新字符应该是 'c' ,而不是 ASCII 表中 z 之后的任何内容......所以我被告知使用模数运算符,我就来了似乎做对了。

我的加密代码是

mov AL, [keyValue]
add byte [SI], AL

这是循环执行的

keyValue存储必须添加到原始字符上的值

SI包含用户输入的字符串

谢谢

4

1 回答 1

1

div在这种情况下,实际上不需要使用模 ( )。您可以简单地减去字母表的大小,如果值超出范围,则将其添加回来。

这是一个示例程序(仅处理小写字符,并为简单起见使用预定义的字符串和键):

[org 0x100]

  mov si,thestring

encrypt:
  mov al,[si]
  cmp al,'$'
  je encryptdone
  add al,[thekey]
  sub al,'z'+1-'a'
  cmp al,'a'
  jge inrange
  add al,'z'+1-'a'
inrange:
  mov [si],al
  inc si
  jmp encrypt

encryptdone:
  ; Print the encrypted string and exit to DOS
  mov dx,thestring
  mov ah,9
  int 0x21

  mov ah,0x4c
  int 0x21

thestring db "abz$"
thekey db 3

运行此输出字符串dec

于 2013-05-22T10:27:19.967 回答