【发布时间】:2019-10-21 11:03:51
【问题描述】:
所以我正在创建一个简单的 8086 程序来计算两个两位数之和:
.model small
.data
first db 0
second db 0
sum db 0
.stack
.code
mov ax, data
mov ds, ax
mov es, ax
mov ah, 1
int 21h
sub al, 48d
mov bl, 10
mul bl
mov first, al
mov ah, 1
int 21h
sub al, 48d
add first, al
mov ah, 1
int 21h
sub al, 48d
mov bl, 10
mul bl
mov second, al
mov ah, 1
int 21h
sub al, 48d
add second, al
mov al, first
add al, second
mov sum, al
但是,当我特别检查数字的值时,它给了我一个负数,因为它是有符号值。例如,如果第一个数字是 99,第二个数字是 98,则总和为 -59。
有没有人可以解决这个问题?
【问题讨论】:
-
数字的第一位是它的符号。所以如果加法再多一点,它就会变成一个负数。如果不明白,请了解系统中数字的表示,以及二进制中的一些计算。
-
感觉就像一个整数溢出问题 99+98=197, unisgned binary 中的 197 是
11000101如果我们将其读取为有符号整数,则为 -59。只有 8 位表示,最大正数是 127