问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

用汇编语言实现从键盘输入两个2位数并进行相加,最后输出结果

发布网友 发布时间:2022-06-03 14:04

我来回答

3个回答

热心网友 时间:2023-10-20 23:10

DATAS SEGMENT ;数据段
DATA1 DB 31H,32H,38H,34H,37H ;定义DATA1为被加数
DATA2 DB 34H,35H,39H,37H,31H ;定义DATA2为加数
DATAS ENDS

STACKS SEGMENT ;堆栈段
STA DB 64 DUP(0) ;(伪指令)为STA预留64个字节的存储空间
SP_TOP DB 0 ;定义SP_TOP单元的数值为0
STACKS ENDS

CODES SEGMENT ;代码段
ASSUME CS:CODES,DS:DATAS,ES:DATAS,SS:STACKS
START:
MOV AX,DATAS
MOV DS,AX ; 设置数据段

MOV AX,STACKS
MOV SS,AX ; 设置堆栈段
LEA SP,SP_TOP ; 设置栈顶指针

MOV SI,OFFSET DATA1 ;把DATA1偏移量地址赋予SI
MOV BX,05 ;
CALL DISPL ; 显示被加数
CALL CRLF ; 回车、换行
MOV SI,OFFSET DATA2 ; 把DATA2偏移量地址赋予SI
MOV BX,05 ;
CALL DISPL ; 显示加数
CALL CRLF ; 回车、换行
MOV DI,OFFSET DATA1 ; 把DATA1偏移量地址赋予DI
CALL ADDA ;调用ADDA子程序,实行加法运算

MOV BX,05 ;
CALL DISPL ; 显示结果
CALL CRLF ; 回车、换行
MOV AX,4C00H ;
INT 21H ;调用DOS21H功能,返回

CRLF PROC NEAR ;回车、显示功能过程定义,属性为NEAR
MOV DL,0DH ;把回车的ASCII码0DH传给DL
MOV AH,02H ;送DOS 的中断调用功能号
INT 21H ; DOS 的中断调用

MOV DL,0AH ; 把换行的ASCII码0AH传给DL
MOV AH,02H ; 送DOS 的中断调用功能号
INT 21H ; DOS 的中断调用
RET ; 返回
CRLF ENDP ;完成过程定义

DISPL PROC NEAR ;显示功能过程定义,属性为NEAR
DSL: MOV AH,02 ;送显示功能号
MOV DL,[SI+BX-1] ;显示字符串中一字符
INT 21H ; DOS 的中断调用
DEC BX ;BX减1,修改偏移量
JNZ DSL ;如果BX未减到零,跳到DSL执行指令
RET ;返回
DISPL ENDP ;完成显示功能子程序定义

ADDA PROC NEAR ;实行加法运算子程序过程定义,属性为NEAR
MOV DX,SI
MOV BP,DI
MOV BX,05

TRAN_HEX: SUB BYTE PTR[SI+BX-1],30H ;把ASCII码数转化为十六进制
SUB BYTE PTR[DI+BX-1],30H
DEC BX ; BX减1,修改偏移量
JNZ TRAN_ HEX ; 如果BX未减到零,跳到TRAN_ HEX执行指令
MOV SI,DX
MOV DI,BP
MOV CX,05 ; 包括进位,共5位
CLC ;进位标志位CF清零 (clear carry flag)
THE_ADD: MOV AL,[SI]
MOV BL,[DI]
ADC AL,BL ; 带进位相加,把结果存在AX
AAA ;进行AAA调整,非结合BCD码的加法调整
MOV [SI],AL ; 结果送被加数区
INC SI ;SI加1
INC DI ;DI加1(指向下一位)
LOOP THE_ADD ;循环
MOV SI,DX
MOV DI,BP
MOV BX,05

TRAN_ASCI: ADD BYTE PTR[SI+BX-1],30H
ADD BYTE PTR[DI+BX-1],30H
;使用PTR转换属性并相加,将十六进制数转化为ASCII表示
DEC BX ; BX减1,修改偏移量
JNZ TRAN_ASCI ; 如果BX未减到零,跳到TRAN_ASCI 执行指令
RET ;返回
ADDA ENDP ;加法子程序定义完成

CODES ENDS ;代码段完成
END START

热心网友 时间:2023-10-20 23:11

CRLF MACRO ;定义回车换行的宏命令 宏指令名crlf
MOV DL,0DH
MOV AH,02H
INT 21H ;int 21h 执行功能调用
MOV DL,0AH
MOV AH,02H
INT 21H
ENDM

DATA SEGMENT ;定义数据段 segment定义段,段名为segment
DATA1 DB 20 DUP(?) ;加数
DATA2 DB 20 DUP(?) ;被加数
DATA ENDS

STACK SEGMENT ;堆栈段
STA DB 20 DUP(?)
TOP EQU LENGTH STA
STACK ENDS

CODE SEGMENT ;程序段
ASSUME CS:CODE,DS:DATA,SS:STACK,ES:DATA ;assume规定段所属的段寄存器

START: MOV AX,DATA ;数据段地址DS
MOV DS,AX
MOV AX,STACK ;确定堆栈
MOV SS,AX
MOV AX,TOP
MOV SP,AX

MOV BX,02
MOV SI,OFFSET DATA1 ;设置指针
CALL INPUT ;调用输入函数INPUT
CRLF

MOV BX,02 ;调用输入函数
MOV SI,OFFSET DATA2
CALL INPUT
CRLF
CRLF

MOV SI,OFFSET DATA2 ;显示被加数
MOV BX,02 ;2位
CALL DISPL
CRLF

MOV SI,OFFSET DATA1 ;取加数地址,显示加数
MOV BX,02
CALL DISPL
CRLF

MOV DI,OFFSET DATA2 ;取被加数首址
CALL ADDA ;执行加法
MOV SI,OFFSET DATA1 ;显示结果
MOV BX,02
CALL DISPL
CRLF
MOV AX,4C00H ;程序结束 返回DOS
INT 21H

DISPL PROC NEAR ;proc指示过程开始,过程名proc near定义近指针
DSI: MOV AH,02
MOV DL,[SI+BX-1]
INT 21H ;这三句为显示输出,被输出的字符送DL
DEC BX
JNZ DSI
RET ;返回DOS,不过是有条件的,
DISPL ENDP

ADDA PROC NEAR
MOV DX,SI
MOV BP,DI
MOV BX,02

AD1: SUB BYTE PTR[SI+BX-1],30H ;byte指示字节长度的操作数 byte ptr
SUB BYTE PTR[DI+BX-1],30H
DEC BX
JNZ AD1
MOV SI,DX
MOV DI,BP
MOV CX,02
CLC

AD2: MOV AL,[SI]
MOV BL,[DI]
ADC AL,BL
AAA
MOV [SI],AL
INC SI
INC DI ;inc加,dec减
LOOP AD2
MOV SI,DX
MOV DI,BP
MOV BX,02

AD3: ADD BYTE PTR[SI+BX-1],30H
ADD BYTE PTR[DI+BX-1],30H
DEC BX
JNE AD3
RET

INPUT PROC NEAR ;函数的输入
IN1:MOV AH,01
INT 21H ;这两句,从键盘输入数,并回显 字符到AL,AL中为ASCII码
MOV [SI],AL
INC SI
DEC BX
JNZ IN1 ;in1为0时循环结束
RET
INPUT ENDP

ADDA ENDP
CODE ENDS
END START

热心网友 时间:2023-10-20 23:11

.model small
.386
.stack
.data
a db ?
b db ?
sum db ?
.code
main proc far
mov ax,@data
mov ds,ax
call decibin
mov a,bl
call decibin
mov b,bl
add bl,a
mov sum,bl
call bindec

exit1:
mov ax,4c00h
int 21h
main endp

decibin proc near
mov ah,1
int 21h
and al,0fh
mov bl,al
cmp al,0
jl exit
cmp al,9d
jg exit

mov ah,1
int 21h
and al,0fh
cmp al,0
jl exit
cmp al,9d
jg exit

xchg bl,al
mov cl,10d
mul cl

xchg al,bl
add bl,al
exit:
ret
decibin endp

bindec proc
xor ax,ax
xor cx,cx
mov al,bl
mov bl,10

Dopush:
div bl
push bx
inc cx
test al,al
jnz Dopush

mov ah,2
mov dl,0dh
int 21h

mov ah,2
mov dl,0ah
int 21h

Dopop:
pop dx
mov ah,2
int 21h
loop Dopop
ret
bindec endp

end main
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
卡耐基的智慧大全集内容简介 会说话赢天下内容简介 卡耐基演讲与口才内容简介 商务口才训练内容简介 卡耐基金牌口才作者简介 卡耐基商务口才 作者简介 爱因斯坦的更多故事 杨柯叶谨言是什么电视 房贷和消费贷利率差别不大,但是还款金额差别挺大,都是怎么计算的... ...11月18号提现1500元、,11月25号还款1515,请问我还需要还 小猴英语和斑马英语哪个好? 95298102是哪电话? DSL和DSI哪个好? 内存DDR是什么意思?还有什么叫窄条? 今年立春是那一天 想创业,如何开好舞蹈工作室,该做什么准备,租商业铺还是写字楼 2018年以前有哪些年份,年三十立春 一个90平米的舞蹈教室饱和运行能教多少人 属相的交替时间是农历的年三十还是立春? 19年立春时间 windows图片和传真查看器图片不显示 为什么图片不能用”windows图片和传真查看器”查看了?双击或右键打开后没得反应? 请问吃野生菌拉肚子怎么办 我用的电解电容标称是-40~105度的工作温度,但是因为测试需要,要在120度下工作一个小时,这个电容能在120 450v22uf铝电解电容的漏电流为多少 怎么样在陌陌上查询到和某个人的第一次联系的时间? 时间序列中的自相关函数为什么递减?对平稳过程,为什么自相关函数快速递减到零? 请问图中平板用的这个画画软件叫什么??? 当你正在面试,面试官问你期待工资多少时,该怎么回答 卫生间水龙头用时间长了好多毛刺一样的东西怎么清理 what is your achilles heel 这句话帮我翻译下 android studio gradle version 是编译的吗 怎样使用手机可以延长手机寿命 在长春达内本来想学平面设计,现在听说UID很火,有没有人学过啊。 今天暴食了,这样吃会胖么? 长春 乌兰浩特 今天突然暴食了下会不会胖呢? 长春的光谷大街在什么区 暴饮暴食米饭容易长胖吗 日照到长春的火车,在长春哪个站停? 怎样延长手机的待机时间如题 谢谢了 最近三天暴饮暴食了,会不会长胖很多. 长春到大庆开车走什么路线比较好? 请问:由长春市吉林省图书馆如何到吉林大学前卫校区? 怎样才能延长手机的使用时间 突然暴饮暴食会发胖吗? 晚上暴食第二天不吃饭会胖吗 为什么塑钢焊接机在焊接的时候总是粘焊纸 连续两天的暴饮暴食会胖吗 偶尔几次暴饮暴食(一个星期一到两次)会发胖吗?