实验目标
- A、编写多个整数求和的程序:
对用户输入的多个整数进行求和,并输出结果。
阅读然后修改附录A中的求和程序(该程序实现了3个整个求和的功能),使用一个常量决定数组的大小(即程序最大可以求和的整数个数):
ARRAY_SIZE = 20
Array DWORD ARRAY_SIZE DUP(?)
写一个过程提示用户输入需要求和的整数的个数,向promptForIntegers过程传递用户输入的数值。如果用户的输入值大于ARRAY_SIZE(判断的示例代码参见附录B),那么显示一条错误信息并退出程序。提示和错误信息可以如下例所示:
How many integers will be added? 21
The array cannot be larger than 20
精心设计程序,使得在修改了ARRAY_SIZE后,错误提示信息中的ARRAY_SIZE数目值(在上例中是20)也应自动修改。
提示:
a). 编程能力一般的同学可以分两步:①弄懂附录A的程序。该程序实现了3个整个求和的功能。 ②找到附录A的程序需要修改的地方,以实现多个整数求和。
b). 编程能力较强的同学建议直接编写程序实现。
- B、对上述程序添加功能:除显示多个整数的和外,还分别显示这些整数中正整数的和负整数的和。(区分正数与负数的示例代码参见附录B)
实验附录
- 附录A
程序功能:由用户输入3个整个数,然后对这3个整数进行求和,并输出结果。
- 附录B
1.比较无符号数是否超过20的示例代码:
cmp var_A, 20 ; var_A可以为内存操作数,也可以为寄存器
ja too_big_error
; 处理小于等于20的代码
; …
; 注意:顺序执行时会执行下面处理错误情况的代码,可以使用jmp指令绕开
too_big_error:
; 处理大于20的错误情况的代码
2.判断有符号数是正数还是负数的示例代码:
cmp var_A, 0 ; var_A可以为内存操作数,也可以为寄存器
jge positive_and_0
; 处理负数的代码
; …
; 注意:顺序执行时会执行下面处理正数和0的代码,可以使用jmp指令绕开
positive_and_0:
; 处理正数和0的代码
程序源代码
TITLE Integer Summation Program (Sum2.asm)
INCLUDE Irvine32.inc
INTEGER_COUNT = 3
.data
str1 BYTE "Enter a signed integer: ",0
str2 BYTE "The sum of the integers is ",0
array DWORD INTEGER_COUNT DUP(?)
.code
main PROC
call Clrscr
mov esi,OFFSET array
mov ecx,INTEGER_COUNT
;call DumpRegs ; display registers
call PromptForIntegers
call ArraySum
Call DisplaySum
exit
main ENDP
PromptForIntegers PROC USES ecx edx esi
mov edx