用汇编语言编程,题目是:输入两个字数据(16 位的数)X,Y,计算 Z=X+Y,并把 Z 的结果显示出来。
时间: 2024-02-18 21:59:37 浏览: 149
以下是汇编语言程序:
```
.model small
.stack
.DATA
inputPrompt1 DB '请输入 X(16位):$'
inputPrompt2 DB '请输入 Y(16位):$'
outputPrompt DB 'X+Y 的结果为:$'
x DW ?
y DW ?
z DW ?
inputBuffer DW 10 DUP ('$')
.CODE
main PROC
; 初始化堆栈
MOV AX, @DATA
MOV DS, AX
MOV SS, AX
MOV SP, 256
; 输入 X
MOV AH, 9
LEA DX, inputPrompt1
INT 21H
MOV AH, 0Ah
LEA DX, inputBuffer
INT 21H
MOV AX, inputBuffer
MOV x, AX
; 输入 Y
MOV AH, 9
LEA DX, inputPrompt2
INT 21H
MOV AH, 0Ah
LEA DX, inputBuffer
INT 21H
MOV AX, inputBuffer
MOV y, AX
; 计算 Z
MOV AX, x
ADD AX, y
MOV z, AX
; 显示 Z
MOV AH, 9
LEA DX, outputPrompt
INT 21H
MOV AX, z
CALL displayWord
; 退出程序
MOV AH, 4CH
INT 21H
main ENDP
displayWord PROC
; 将一个字(16位)显示在屏幕上
PUSH AX
PUSH BX
PUSH CX
PUSH DX
; 将 AX 中的值转换成十进制字符串
MOV BX, 10
MOV CX, 0
MOV DX, 0
DIV BX
PUSH DX
MOV DX, AX
DIV BX
PUSH DX
MOV DX, CX
DIV BX
PUSH DX
MOV DX, CX
DIV BX
PUSH DX
; 将字符串显示在屏幕上
MOV AH, 2
MOV CX, 4
POP BX
ADD BL, '0'
MOV DL, BL
INT 21H
LOOP displayLoop
MOV DL, '$'
INT 21H
; 恢复寄存器状态
POP DX
POP CX
POP BX
POP AX
RET
displayLoop:
POP DX
ADD DL, '0'
MOV AH, 2
INT 21H
LOOP displayLoop
RET
END main
```
程序中使用了 INT 21H 用于输入输出操作,以及一些算术指令,如 ADD 和 DIV。注意,这个程序只能计算非负整数的加法,如果 X 和 Y 的和超过了 16 位,则会产生溢出错误。
阅读全文