微机原理汇编问题

编写程序,实现一位数的加法,要求:从键盘上输入被加数和加数,通过程序求和得出结果,在屏幕上显示一个完整的算式,例即执行生成的.exe文件时显示形式为:7+9=16.

第1个回答  2012-11-07
;输入被加数
mov ah,1
int 21h
mov bl,al

;输入加数
mov ah,1
int 21h

;输出求和表达式
mov dl,bl
mov ah,2
int 21h
mov dl,'+'
int 21h
mov dl,al
int 21h
mov dl,'='
int 21h

;求和
and bl,0fh
and al,0fh
add al,bl
daa

;输出结果高位
mov dl,al
mov cl,4
shr dl,cl
or dl,30H
mov ah,2
int 21h

;输出结果低位
mov dl,al
and dl,0fh
or dl,30H
mov ah,2
int 21h
第2个回答  2019-10-13
怎么没有看到问题啊?等待中.................
第一题:
当前指令物理地址是由cs:ip决定的,则下一条指令应该是cs*16+(ip+2H)=10000H+102H=10102H
当前栈顶物理地址为SS*16+SP=40200H
[BX]对应的段寄存器是DS所以物理地址是DS*16+BX=20300H
[BP]对应的是SS所以物理地址是SS*16+BP=40400H
ES:[BX+SI]的物理地址为ES*16+BX+SI=30800H
第二题:
对16位数的第6、7、8、12、13位判断,只要用test指令就可以了
DATA
SEGMENT
;数据段定义
S1
DB
'ZERO','$'
;为零时输出的内容
S2
DB
'NOT
ZERO','$'
;不为零时输出的内容
DATA
ENDS
CODE
SEGMENT
;代码段执行
ASSUME
CS:CODE,DS:DATA
;初始化
START:
MOV
AX,DATA
MOV
DS,AX
;确定段地址
TEST
BX,18EOH
;对6、7、8、12、13位进行测试
JZ
Z
;如果为零跳转到Z执行
LEA
DX,S2
;不为零执行
JMP
DO
Z:LEA
DX,S1
DO:
MOV
AH,09H
;调用dos中断,输出提示信息
INT
21H
MOV
AH,4CH
INT21H
CODE
ENDS
END
START
第三题:
MOV
CL,300;溢出错误
MOV
BX,Dl;原操作数和目标操作数位数不一致
MOV
ES,1000H;段寄存器不能立即寻址
TEST
BX,[CX];test原操作数不能用内存变量
SUB
[BX],[BP+SI];内存和内存间不能直接操作
第3个回答  2012-11-07
;MASM 5.0编译通过,运行无误。
;微机原理汇编问题 检举 | 1 小时前 提问者: 曾经不化的雪 | 悬赏分:20
;编写程序,实现一位数的加法,要求:从键盘上输入被加数和加数,
;通过程序求和得出结果,在屏幕上显示一个完整的算式,
;例即执行生成的.exe文件时显示形式为:7+9=16.
data segment
F DB 0 ;标志位字节,每输入一个数后该标志求反,以实现每两个数相加。
A DB 0 ;被加数
CRLF DB 0DH,0AH,24H ;回车换行
data ends
code segment
assume cs:code, ds:data
main proc far
begin:
push ds
mov ax,0
push ax
MOV AX,DATA
MOV DS,AX

NEXT:
MOV AH,7
INT 21H
cmp al,0dh ;回车程序结束
je exit
CMP AL,'0' ;屏蔽0-9之外的字符
JB NEXT
CMP AL,'9'
JA NEXT
PUSH AX
MOV DL,AL
MOV AH,2
INT 21H
MOV DL,F
NOT F
MOV BL,F
CMP BL,0 ;标志位字节=0时计算,否则继续输入加数
JE ADD_1
POP AX
SUB AL,30H
MOV A,AL
MOV AH,2
MOV DL,'+'
INT 21H
JMP NEXT

ADD_1:
MOV AH,2
MOV DL,'='
INT 21H
POP AX
SUB AL,30H
ADD AL,A
DAA
MOV DL,AL
MOV CL,4
SHR DL,CL
AND AL,0FH
AND DL,0FH
ADD AL,30H
ADD DL,30H
PUSH AX
MOV AH,2
INT 21H
POP DX
MOV AH,2
INT 21H
MOV DX,OFFSET CRLF
MOV AH,9
INT 21H
JMP NEXT
EXIT:
RET
ret
main endp

code ends
end begin本回答被提问者和网友采纳