|
汇编作业:- DATA SEGMENT
- KEYBUFFER DB 100
- DB ?
- DB 100 DUP(?)
- TEMP DW ?
- ADD1 DB 100 DUP(?)
- ADD2 DB 100 DUP(?)
- SUM DB 100 DUP(?)
- STRING1 DB 'Please input a decimal data:
- [1] 从键盘输入两个十进制数(如12678532与21736543),以二进制数形式存放在ADD1和ADD2为首址的存贮器单元,输入一个十进制数采用子程序形式。
- [2] 和以二进制数的形式存入SUM以下单元。
- [3] 将和送到屏幕显示采用子程序形式。
- STRING2 DB 'The sum of two datas is:
- [1] 从键盘输入两个十进制数(如12678532与21736543),以二进制数形式存放在ADD1和ADD2为首址的存贮器单元,输入一个十进制数采用子程序形式。
- [2] 和以二进制数的形式存入SUM以下单元。
- [3] 将和送到屏幕显示采用子程序形式。
- DATA ENDS
- STACK SEGMENT STACK 'STACK'
- DW 100H DUP(?)
- TOP LABEL WORD
- STACK ENDS
- CODE SEGMENT
- ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
- START:
- MOV AX, DATA
- MOV DS,AX
- MOV ES,AX
- MOV AX,STACK
- MOV SS,AX
- LEA SP,TOP
- CALL INPUT ;输入十进制数
- CALL DISPCR
- LEA SI,KEYBUFFER
- CALL TRANS10TO32
- MOV WORD PTR ADD1+2,DX ;低位在前高位在后
- MOV WORD PTR ADD1,AX
- CALL INPUT ;输入十进制数
- CALL DISPCR
- LEA SI,KEYBUFFER
- CALL TRANS10TO32 ;将缓存区中ASCII码转换成32位二进制数
- MOV WORD PTR ADD2+2,DX ;低位在前高位在后
- MOV WORD PTR ADD2,AX
- LEA SI,ADD1
- LEA DI,ADD2
- MOV AX,[SI]
- MOV BX,[DI]
- ADD AX,BX ;低位相加
- MOV WORD PTR SUM,AX
- MOV AX,[SI+2]
- MOV BX,[DI+2]
- ADC AX,BX ;高位与低位进位相加
- MOV WORD PTR SUM+2,AX
- PUSH AX
- PUSH DX
- LEA DX,STRING2 ;显示输出提示字符串
- MOV AH,09H
- INT 21H
- POP DX
- POP AX
- CALL DISPAXD
- MOV AX,WORD PTR SUM
- CALL DISPAXD
- MOV AH,4CH
- INT 21H
- DISPAXD PROC NEAR
- ;功能:将AX中的内容输出为十进制
- ;入口参数:AX,DI(缓冲区地址)
- ;出口参数:无
- PUSH AX
- PUSH CX
- PUSH DX
- PUSH DI
- LEA DI,KEYBUFFER
- MOV CX,5
- CALL TRANS16TO10 ;将16进制转化为十进制
- LEA DI,KEYBUFFER+4
- L2:
- MOV DL,[DI]
- ADD DL,30H
- MOV AH,02H ;显示
- INT 21H
- DEC DI ;从后往前输出显示
- LOOP L2
- POP DI
- POP DX
- POP CX
- POP AX
- RET
- DISPAXD ENDP
- TRANS16TO10 PROC NEAR
- ;功能:将AX中的二进制数转化为十进制
- ;入口参数:AX,DI(缓冲区地址)
- ;出口参数:缓冲区内容
- PUSH AX
- PUSH BX
- PUSH CX
- PUSH DX
- PUSH DI
- MOV BX,10
- MOV CX,5 ;循环五次
- L1:
- XOR DX,DX
- DIV BX
- MOV [DI],DL
- INC DI
- LOOP L1
- POP DI
- POP DX
- POP CX
- POP BX
- POP AX
- RET
- TRANS16TO10 ENDP
- INPUT PROC NEAR
- ;入口参数:DX(缓冲区首地址)
- ;出口参数:缓存区内容
- LEA DX,STRING1 ;显示输入提示字符串
- MOV AH,09H
- INT 21H
- LEA DX,KEYBUFFER
- MOV AH,0AH
- INT 21H
- RET
- INPUT ENDP
- TRANS10TO32 PROC NEAR
- ;将缓冲区中以ASCII码表示的十进制数转换成32位二进制数
- ;入口参数:SI(缓冲区首地址)
- ;出口参数:DX:AX(变换结果)
- XOR AX,AX
- XOR CX,CX
- MOV CL,[SI+1]
- ADD SI,2
- MOV AL,[SI]
- INC SI
- SUB AL,30H
- DEC CX
- JCXZ TRANSF_OK
- TRANSF1:
- MOV BX,DX
- LEA DI,TEMP
- MOV [DI],WORD PTR 000AH
- MUL WORD PTR [DI]
- PUSH AX
- PUSH DX
- MOV AX,BX
- MUL WORD PTR [DI]
- PUSH AX
- POP DX
- POP BX
- ADD DX,BX
- POP AX
- XOR BX,BX
- MOV BL,[SI]
- INC SI
- SUB BL,30H
- ADD AX,BX
- ADC DX,0
- LOOP TRANSF1
- TRANSF_OK:
- RET
- TRANS10TO32 ENDP
- DISPCR PROC NEAR
- PUSH AX
- PUSH DX
- MOV AH,2
- MOV DL,0AH
- INT 21H
- MOV AH,2
- MOV DL,0DH
- INT 21H
- POP DX
- POP AX
- RET
- DISPCR ENDP
- CODE ENDS
复制代码
[1] 从键盘输入两个十进制数(如12678532与21736543),以二进制数形式存放在ADD1和ADD2为首址的存贮器单元,输入一个十进制数采用子程序形式。
[2] 和以二进制数的形式存入SUM以下单元。
[3] 将和送到屏幕显示采用子程序形式。
|
-
汇编1.png
(13.57 KB, 下载次数: 109)
1
-
-
1.doc
49 KB, 下载次数: 4, 下载积分: 黑币 -5
代码和程序
-
-
1.zip
1.25 KB, 下载次数: 5, 下载积分: 黑币 -5
asm文件
|