0
我對程序集x86體系結構有疑問。如何在程序集x86中使用mod
INCLUDE Irvine32.inc
.data
day BYTE 0
month BYTE 0
year BYTE 0
a BYTE 0
y BYTE 0
m BYTE 0
count BYTE 0
prompt1 BYTE "enter month: ",0
prompt2 BYTE "enter day: ",0
prompt3 BYTE "enter an year: ",0
prompt4 BYTE " the day of the week is ",0
.code
main PROC
mov edx, OFFSET prompt1
call writeString
mov eax, OFFSET month
mov ecx, 19
call readInt
call crlf
mov edx, OFFSET prompt2
call writeString
mov eax, OFFSET day
mov ecx, 19
call readInt
call crlf
mov edx, OFFSET prompt3
call writeString
mov eax, OFFSET year
mov ecx, 19
call readInt
call crlf
mov al, 14
sub al, month
mov bl, 12
div bl
mov a, al
mov al, 0
mov ah, year
sub ah, a
mov y, ah
mov ah, 0
mov bh, 12
mul a
add bh, a
mov ch, 2
sub bh, ch
mov m, bh
mov bh, 0
mov ch, 0
mov al, 31
mul m
mov ah, 12
div ah
mov bl, y
mov bh, day
add bh, y
mov cl, y
mov ch, 4
div ch
add bh, cl
mov dl, y
mov dh, 4
div dh
add bh, cl
add bh, al
mov al, 0
mov al, 7 // mod 7
div al
exit
main ENDP
END main
所以我應該做的這些算術等式:
a = (14 - month)/12
y = year - a
m = month + (12 * a) - 2
d = (day + y + y/4 - y/100 + y/400 + (31 * m/12)) % 7
對於mod 7
最後一個方程,我得到了一個錯誤,「整數溢出」,這是由於使用bl
我想。
如果我做這樣的事情
mov ax, "thing in parenthesis"
mov cl, 7
div cl
然後我會得到al
是商,ah
是餘數。
但我該怎麼辦mod
而不必使用ax
註冊?
將AH設置爲0後仍然出現相同的錯誤 – bluebk 2013-05-02 06:27:08
您的代碼中有多個'div',因此您需要修復所有這些錯誤。 'div啊'顯然不得不改爲使用'ah'以外的另一個除數。 – Michael 2013-05-02 06:32:50