【问题标题】:Sum of two positive numbers is a negative两个正数之和为负数
【发布时间】: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

标签: x86-16 emu8086


【解决方案1】:

由于您为每个数字使用了一个字节,因此每个数字可以有 2^8 = 256 个不同的值。所以有符号数必须在 -128 和 127 之间。当加法结果大于 127 时,将其表示为对应的负数。你应该使用word(16位)或更多来解决这个问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多