努力拓宽我的编程技巧。完成python,c ++,java和一点点cobol但是汇编让我感到困惑。试图制作一个程序,用单独的对话框提示和输入四个等级,并计算等级的总和和平均值(总和/ 4)。代码:
.586
.MODEL FLAT
INCLUDE io.h ; header file for input/output
.STACK 4096
.DATA
number1 DWORD ?
number2 DWORD ?
number3 DWORD ?
number4 DWORD ?
four DWORD 4
prompt1 BYTE "Enter first number", 0
prompt2 BYTE "Enter second number", 0
prompt3 BYTE "Enter third number",0
prompt4 BYTE "Enter fourth number",0
string BYTE 40 DUP (?)
resultLbl BYTE "The sum is", 0
resultAvg BYTE "The average is",0
sum BYTE 11 DUP (?), 0
avg BYTE 11 DUP (?), 0
.CODE
_MainProc PROC
input prompt1, string, 40 ; read ASCII characters
atod string ; convert to integer
mov number1, eax ; store in memory
input prompt2, string, 40 ; repeat for second number
atod string
mov number2, eax
input prompt3, string, 40
atod string
mov number3, eax
input prompt4, string, 40
atod string
mov number4, eax
mov eax, number1 ; first number to EAX
add eax, number2 ; add second number to EAX
add eax, number3 ; add third number to EAX
add eax, number4 ; add fourth number to EAX
mov ax, eax ; copy eax's value into ax (does this take eax's value away from eax?)
mov al, four ; put's 4 into al
idiv al, ; divides sum by ax(4)
dota avg, ax ; convert to ASCII characters
dtoa sum, eax ; convert to ASCII characters
output resultLbl, sum ; output label and sum
output resultAvg, avg ; output label and avg
mov eax, 0 ; exit with return code 0
ret
_MainProc ENDP
END ; end of source code
不知道我在哪里错了。它编译并运行,但只询问2个数字,然后返回这2个数字的总和。非常感谢任何和所有帮助
答案 0 :(得分:0)
不能说是什么导致只请求2个号码,只有在没有io.h
的情况下输出的总和。那个是从哪里来的?代码是有道理的。
ax
寄存器只有16位。如果您的宏需要eax
中的数字,那么您就会被打破。
你可能想要一个32位的红利和结果。坚持使用32位指令最简单:
cdq ; sign extends eax into the edx register
idiv four ; divide edx:eax by four. Result is in eax.
向右转2位更简单!这也除以4。
sar ax, 2