nasm中的模数运算符

时间:2013-04-14 16:32:46

标签: nasm 16-bit

美好的一天,

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

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

我的加密代码是

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

这是在循环中执行的

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

SI包含用户输入的字符串

由于

1 个答案:

答案 0 :(得分:1)

在这种情况下,实际上并不需要使用modulo(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

相关问题