【发布时间】:2016-11-23 19:47:41
【问题描述】:
我正在编写一些代码,允许我对表格求和,然后使用汇编语言显示其结果。到目前为止,这是我想出的:
data segment
tab db 9 dup(3 5 8 4 7 1 6 7 0)
resultat db ?
data ends
code segment
xor di, di
mov cx, 9
Prog:
mov al, tab[di]
add ax, al
inc di
loop prog
mov resultat ,ax
mov ah, 09h
int 21h
end code
【问题讨论】:
-
你使用什么汇编程序? MASM、TASM、FASM、NASM...?
-
Ela,您的结果是
ax中的二进制文件,您必须将其转换为字符串才能显示。如果你显示ax,你会在屏幕上看到奇怪的字符。 -
您的代码的一个问题是您使用相同的寄存器(
AX=AH:AL)有两个目的:加载当前字节(AL)并将结果累加到AX. -
add ax, al已关闭,因为您从未初始化过ax。这应该加倍al,因为它是 l.s.ax的一部分?然后,您将ax(2 个字节)存储在仅分配 1 个字节内存的resultat中。 -
这个
db 9 dup(3 5 8 4 7 1 6 7 0)真的可以在emu8086中编译吗?它会产生 9 个 9 字节的数组吗?这是荒谬的。对于 OP:正确的方法是db 3, 5, 8, 4, 7, 1, 6, 7, 0定义 9 个字节。你不想重复 9 次 (DUP) 甚至不应该编译为单个值的东西。使用dup多次重复单个值。