第三题
编写一个通用多字节数相加的宏定义,并调用它实现多字节数的加法,注意观察汇编时宏调用被展开的情况。
a) 实验原理
多字节数的加法就是一个迭代过程。运用调用多字节相加的宏定义,可以很简单的实现加法。宏定义中运用间接寻址,用进位标志记录每字节的进位,并在下一字节的加法中加上进位标志,以达到多字节数加法的运算效果。
b) 程序框图
c) 程序源代码
N EQU 4;定义多字节的字节数 ADDMB MACRO M1,M2,M MOV SI,OFFSET M1
MOV DI,OFFSET M2;读取数字的首地址 MOV CX,M CLC L1:
MOV AL,[DI]
ADC [SI],AL;当前位的两个数相加,存在M1的地址中 INC SI
INC DI;两个数的地址均自加1,取下一个数进行运算 LOOP L1 ENDM
DATAS SEGMENT
MB1 DB N DUP(01H) MB2 DB N DUP(01H)
DATAS ENDS
CODES SEGMENT
ASSUME CS:CODES,DS:DATAS START:
MOV AX,DATAS MOV DS,AX
ADDMB MB1,MB2,N;引用宏定义计算多直接数 MOV AH,4CH INT 21H CODES ENDS END START
运行结果:
宏展开
第四题
编写程序:屏幕显示“Password:”,随后从键盘读入字符串,并比较这个字符串与程序内部设定的字符串。若二者相同则显示“Hello!”,否则显示“Sorry!”,注意:要求键盘输入字符不能直接回显在显示器上,而要用*号代替。
a) 实验原理
该程序运用了中断程序INT完成了密码程序的输入与输出,首先把首次输入的密码和第二次确认的密码分别存在PASSWORD1与PASSWORD2 中,并用A与B记录PASSWORD1与PASSWORD2的长度,之后用COMPARE判断两次输入是否相同,并用A与B中比较小的与C比较判断是否结束循环,按照对照结果选择输出。
b) 程序框图
不带回显输入字符,保存为password2 显示*号 不带回显输入字符,保存为password1 显示*号 开始 显示” Please input the password:” N 回车? Y 显示” Please confirm the password:”
N 回车?
N Y 比较两次输入长度并取较小长度 小于较小长度 Y Y 比较? N 显示”Sorry!” 显示”Hello!”