将计算结果低位存入AL,高位存于AH。总体来说,该题原理较为简单。
实验代码如下(参考):
STACK SEGMENT STACK DW 128 DUP(?) STACK ENDS
DATA SEGMENT PARA'DATA' NUMBER1 DB '789123' NUMBER2 DB '123456' SF DB '-' ;需打印的符号 RESULT DB ? ;存算术结果 DATA ENDS
CODE SEGMENT PARA'CODE'
ASSUME CS:CODE,DS:DATA,SS:STACK
MAIN PROC FAR PUSH DS SUB AX,AX PUSH AX
MOV AX,DATA MOV DS,AX
LEA SI,NUMBER1+5 LEA DI,NUMBER2+5 LEA BX,RESULT+5 MOV CX,6 CLC
MOV AL,[SI] ;将低位放在 AL 中 L10: MOV AH,[SI-1] ;将高位放在 AH 中 SBB AL,[DI]
AAS ;做 ASCII 减法调整 OR AX,3030H
MOV [BX],AL ;存单位运算结果 MOV AL,AH ;将下一位放入 AL DEC SI DEC DI DEC BX LOOP L10
MOV AH,02H ;打印算术结果 MOV CX,7 LEA DI,SF L20: MOV DL,[DI] INT 21H
INC DI LOOP L20
MOV AX,4C00H INT 21H MAIN ENDP CODE ENDS END MAIN
二、实验总结
通过数值与非数值题型的练习,有效复习巩固了对汇编整体编程结构的理解和练习。对其一些较常用的指令也有了一定的认识,对汇编中的循环、跳转结构尤其运用多,这就需要我们更加多多练习,以便熟悉掌握汇编编程。
汇编很是繁琐,有时C语言中的一句话,它可能要用好几句才能描绘相同的意思。自己在编程时也问了很多同学,借鉴了很多参考资料,甚至还copy了不少人的心血。不过觉得自己整体编程感觉还未完全形成,还需多加练习。
不过,真的感觉汇编难,有时就是不知道该如何下手。还有其中各种堆栈,各种寄存器感觉也比较晕,指令更是多得??不过,还是想多懂点程序。