Assembly 在汇编x86中计算算术表达式

Assembly 在汇编x86中计算算术表达式,assembly,x86,masm,arithmetic-expressions,irvine32,Assembly,X86,Masm,Arithmetic Expressions,Irvine32,我有一个汇编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,

我有一个汇编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
所以我必须为这段代码做两个算术等式

a = (14 - month) / 12
y = year - a
这是我的意见

enter month: 4

enter day: 15

enter an year: 2013
我预计最后一条指令后的y值为7dd(2013年)

但是我得到的寄存器ecx的值是0000FFFF,为什么不是y7dd的值,而是FFFF

有人能帮忙吗?
提前感谢

您想要的答案,edx中将显示10位小数,eax将为0

mov-ebx,0

莫瓦克斯,14岁

分斧,月

莫夫bx,12

分区bx


eax中的10/12=0,edx中的10余数

仔细查看除法结果。
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