我有一个程序集x86问题
INCLUDE Irvine32.inc
.data
day WORD 0
month WORD 0
year WORD 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 edx, 0
mov eax, OFFSET month
mov ecx, 19
call readInt
call crlf
mov eax, 0
mov ecx, 0
mov edx, OFFSET prompt2
call writeString
mov edx, 0
mov eax, OFFSET day
mov ecx, 19
call readInt
call crlf
mov eax, 0
mov ecx, 0
mov edx, OFFSET prompt3
call writeString
mov edx, 0
mov eax, OFFSET year
mov ecx, 19
call readInt
call crlf
mov eax, 0
mov ecx, 0
mov ebx, 0
mov ax, 14
sub ax, month
mov bx, 12
div bx
mov ebx, 0
sub year, ax
mov ecx, 0
mov cx, year
exit
main ENDP
END main
所以我必须为此代码做2个算术等式
a = (14 - month) / 12
y = year - a
这是我的输入
enter month: 4
enter day: 15
enter an year: 2013
我期望在最后一条指令之后y的值为7dd(2013)
但我得到寄存器ecx的值是0000FFFF,为什么不是y 7dd的值,而是FFFF
任何人都可以帮忙吗? 提前谢谢
答案 0 :(得分:0)
你所追求的答案,10decimal将出现在edx中,而eax将为0
mov ebx,0
mov ax,14
sub ax,month
mov bx,12
div bx
eax中10/12 = 0,edx中有10个余数
答案 1 :(得分:0)
INCLUDE Irvine32.inc
.data
day WORD 0
month WORD 0
year WORD 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 edx, 0
call readInt
call crlf
mov month, ax
mov eax, 0
mov edx, OFFSET prompt2
call writeString
mov edx, 0
call readInt
call crlf
mov day, ax
mov eax, 0
mov edx, OFFSET prompt3
call writeString
mov edx, 0
call readInt
call crlf
mov year, ax
mov eax, 0
mov ebx, 0
mov ax, 14
sub ax, month
mov bx, 12
div bx
mov si, ax ;; a store in si
sub year, ax
mov di, year ;; y store in di
mov ax, ax
mul bx
add ax, month
mov cx, 2
sub ax, cx
mov ecx, 0
mov cx, ax ;; m store in cx
mov eax, 0
mov ebx, 0
mov esp, 0
mov ebp, 0
add day, di
mov ax, di
mov bx, 4
div bx
add day, ax
mov eax, 0
mov ebx, 0
mov ax, di
mov bl, 100
div bl
mov ah, 0
sub day, ax
mov eax, 0
mov ebx, 0
mov dx, 0
mov ax, di
mov bx, 400
div bx
add day, ax
mov bp, day ;; temporary holder for d value up to y/400 calculation
mov eax, 0
mov ebx, 0
mov ax, 31
mul cx
mov bx, 12
div bx
add bp, ax
mov al, 7
div al
exit
main ENDP
END main