为了实现字节数组的求和,须要先将要加的数放入数据段的一个字节数组中,然后用SI指向此数组的首地址,依次递增,将累加和放入一个寄存器.本程序功能有限,主要是用到了子程序,这就要求对现场进行保护,在子程序执行完后还要RET,恢复其现场,当然本程序没有这么复杂,只是将求和与显示分别作成了一个子程序,
当然我写的这个DISP子程序还有很多不足的地方,只能显示10以下的数,超过10将会显示出乱码,因为出于时间关系没有对其进行完善,这就要用到代码转换的内容了,因为你要用不同的进制进行显示需要进行不同的处理,可能有人会问了,为什么汇编要转换呢,因为在计算机里都是以二进制进行存储的,而显示是显示的字符的ASCII码,如果不进行转换肯定会显示乱码的.
现在大体上说一下代码转换的思路,我们先取出四位,你可以采取循环移位的方式,这样便可轻松的取出高四位,再对其进行判断,当是数字时对其加30H,是字符的时候对其加37H,这是由ASCII表决定的,如果你不信,可以查询一下ASCII表计算试试看.这样我们就可以以任十六进制显示数字了,至于转换成其它码制以后再叙.
下面有一示例程序,完成一组数相加的功能,还有很多不足之处,见谅!
- DATAS SEGMENT
- BUF DB 1,2,3,1,1,0,1
- COUNT EQU ($-BUF)-1
- QUESTION DB 13,10,13,10,13,10,'1+2+3+1+1+0+1 ='
- RESULT DB ?
- DB '$'
- DATAS ENDS
- ;-------------
- CODES SEGMENT
- ASSUME DS:DATAS,CS:CODES
- START:
- MOV AX,DATAS
- MOV DS,AX
- XOR CX,CX
- XOR AX,AX
- LEA SI,BUF
- MOV CX,COUNT
- CALL SUM ;调用求和子程序
- MOV RESULT,BL ;将结果存入RESULT存储单元
- CALL DISPLAY ;调用显示子程序
- MOV AH,1
- INT 21H
- [img]/upload/attachment/90267/fc243365-aaa4-315d-b24c-1215dc2b4620.bmp[/img]
-
- MOV AH,4CH ;RETURN TO DOS
- INT 21H
- ;-----------SUM BEGIN----------------
- ;子程序一
- ;作用:计算总和
- ;入口参数:SI,CX
- ;出口参数:AX
- SUM PROC
- MOV BX,0
- ADD BL,[SI]
- NEXT:
- INC SI
- ADC BL,[SI]
- LOOP NEXT
- RET
- SUM ENDP
- ;-------------SUM END----------------
- ;------------- DISPLAY BEGIN---------
- ;子程序二
- ;作用:十进制显示
- ;入口参数:RESULT
- ;出口参数:NONE
- DISPLAY PROC
- XOR DX,DX
-
- MOV DX,OFFSET QUESTION
- MOV AH,09H
- INT 21H
- MOV DL,[RESULT]
- ADD DL,30H
- MOV AH,2H
- INT 21H
- RET
- DISPLAY ENDP
- ;-------------DISPLAY END-------------
- CODES ENDS
- END START
DATAS SEGMENT BUF DB 1,2,3,1,1,0,1 COUNT EQU ($-BUF)-1 QUESTION DB 13,10,13,10,13,10,'1+2+3+1+1+0+1 =' RESULT DB ? DB '$'
DATAS ENDS
;-------------
CODES SEGMENT ASSUME DS:DATAS,CS:CODES
START: MOV AX,DATAS MOV DS,AX XOR CX,CX XOR AX,AX LEA SI,BUF MOV CX,COUNT CALL SUM ;调用求和子程序 MOV RESULT,BL ;将结果存入RESULT存储单元 CALL DISPLAY ;调用显示子程序 MOV AH,1 INT 21H
[img]/upload/attachment/90267/fc243365-aaa4-315d-b24c-1215dc2b4620.bmp[/img] MOV AH,4CH ;RETURN TO DOS INT 21H ;-----------SUM BEGIN---------------- ;子程序一 ;作用:计算总和 ;入口参数:SI,CX ;出口参数:AX SUM PROC MOV BX,0 ADD BL,[SI]
NEXT: INC SI ADC BL,[SI] LOOP NEXT RET SUM ENDP ;-------------SUM END---------------- ;------------- DISPLAY BEGIN--------- ;子程序二 ;作用:十进制显示 ;入口参数:RESULT ;出口参数:NONE DISPLAY PROC XOR DX,DX MOV DX,OFFSET QUESTION MOV AH,09H INT 21H MOV DL,[RESULT] ADD DL,30H MOV AH,2H INT 21H RET DISPLAY ENDP ;-------------DISPLAY END-------------
CODES ENDS END START