美好的一天,
我正在尝试在nasm中使用模数运算符,但我一直收到错误...我想加密用户输入的字符串...所以加密必须在26个字母范围内..
e.g。当加密值为3并且用户输入'z'时,新字符应该是'c',而不是在ASCII表格中的z之后的任何内容....所以我被告知使用模数运算符而我只是来似乎做对了。
我的加密代码是
mov AL, [keyValue]
add byte [SI], AL
这是在循环中执行的
keyValue
存储必须添加到原始字符 p>的值
和SI
包含用户输入的字符串
由于
答案 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
。