两个正数之和为负

时间:2019-10-21 11:03:51

标签: x86-16 emu8086

因此,我正在创建一个简单的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。

有人能解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

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