用8086指令系统求输入两个十进制整数的平方差,对于负数结果输出负号
时间: 2023-06-19 22:07:36 浏览: 132
下面是用8086指令系统汇编语言实现输入两个十进制整数的平方差的代码,可以处理负数情况:
```
org 100h ; 程序从100h地址开始执行
section .data ; 数据段
msg1 db 'Enter the first number: $' ; 提示输入第一个数
msg2 db 'Enter the second number: $' ; 提示输入第二个数
msg3 db 'The result is: $' ; 输出结果
section .bss ; 未初始化数据段
num1 resb 2 ; 存放第一个数,2个字节
num2 resb 2 ; 存放第二个数,2个字节
result resw 2 ; 存放结果,2个字节
section .text ; 代码段
start:
; 输入第一个数
mov ah, 9 ; AH=9,显示字符串
mov dx, msg1 ; DX指向要显示的字符串
int 21h ; 调用21h中断,显示字符串
mov ah, 1 ; AH=1,等待输入
int 21h ; 调用21h中断,等待输入
sub al, 30h ; 将ASCII码转换为数字
mov [num1], ax ; 存放第一个数
; 输入第二个数
mov ah, 9 ; AH=9,显示字符串
mov dx, msg2 ; DX指向要显示的字符串
int 21h ; 调用21h中断,显示字符串
mov ah, 1 ; AH=1,等待输入
int 21h ; 调用21h中断,等待输入
sub al, 30h ; 将ASCII码转换为数字
mov [num2], ax ; 存放第二个数
; 计算平方差
mov ax, [num1] ; AX=第一个数
mul ax ; AX=第一个数的平方
mov bx, [num2] ; BX=第二个数
mul bx ; AX=第一个数的平方,BX=第二个数的平方
sub ax, bx ; AX=第一个数的平方减第二个数的平方
cmp ax, 0 ; 比较结果是否为负数
jge positive ; 结果不是负数,跳转到positive
neg ax ; 结果是负数,取反
mov [result], ax ; 存放结果
mov cx, 1 ; CX=1,表示结果为负数
jmp print ; 跳转到print
positive:
mov [result], ax ; 存放结果
mov cx, 0 ; CX=0,表示结果为非负数
print:
; 输出结果
mov ah, 9 ; AH=9,显示字符串
mov dx, msg3 ; DX指向要显示的字符串
int 21h ; 调用21h中断,显示字符串
mov ax, [result] ; AX=结果
cmp cx, 1 ; 比较CX是否为1
je negative ; CX=1,结果为负数,跳转到negative
add ax, 30h ; 将数字转换为ASCII码
mov dl, ah ; DL=0,显示结果的高位
mov ah, 2 ; AH=2,显示字符
int 21h ; 调用21h中断,显示字符
mov dl, al ; DL=结果的低位
jmp display ; 跳转到display
negative:
add ax, 30h ; 将数字转换为ASCII码
mov dl, 2Dh ; DL=2Dh,显示负号
mov ah, 2 ; AH=2,显示字符
int 21h ; 调用21h中断,显示字符
mov dl, ah ; DL=0,显示结果的高位
mov ah, 2 ; AH=2,显示字符
int 21h ; 调用21h中断,显示字符
mov dl, al ; DL=结果的低位
display:
mov ah, 2 ; AH=2,显示字符
int 21h ; 调用21h中断,显示字符
mov ah, 4Ch ; AH=4Ch,程序结束
int 21h ; 调用21h中断,程序结束
```
需要说明的是,这段代码假设输入的数都是两位数,因此使用了`resb 2`和`mov [num1], ax`这样的语句。如果需要处理更大的数,请自行修改。另外,这段代码使用了`cmp`和`jge`指令来判断结果是否为负数,如果需要处理更多的情况,可以使用其他的指令来实现。
阅读全文