2013-04-14 22 views
1

好日子,模運算符在NASM

我試圖使用模運算在NASM,但我不斷收到一個錯誤......我要加密用戶輸入的字符串...所以必須加密在26個字母範圍內。

eg當加密值爲3並且用戶輸入'z'時,新字符應該是'c',而不是在ASCII表中z之後的任何字符....所以我被告知使用模數運算符,我只是來看做對了。

我的加密代碼

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

,這是一個循環

keyValue商店必須加入到原有的特色

SI值進行包含由輸入的字符串用戶

謝謝

回答

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