【发布时间】:2022-08-03 19:55:04
【问题描述】:
当我使用 emu8086 编译和执行代码时,它不会打印正确的值。而是打印值 0。我不明白为什么。有人可以向我解释一下吗?
这是代码:
format MZ
entry code_seg:start ; set entry point
stack 256
segment data_seg
VAR1 DB 5
segment code_seg
start:
; set segment registers:
mov ax, data_seg
mov ds, ax
;print the value
MOV AH,02H
MOV DL,VAR1
ADD DL,30H
INT 21H
; wait for any key....
mov ah, 1
int 21h
mov ax, 4c00h ; exit to operating system.
int 21h
-
尝试将
MOV DL,VAR1临时替换为MOV DL,5。如果它打印字符5,寻找数据寻址中的错误。 -
是的,我刚刚尝试过,它的值 5 可以正确打印。但是当我使用变量时它不起作用,我不明白为什么。
-
看看
MOV DL,VAR1是怎么编码的,应该是8A160000。如果是B200,请将MOV DL,VAR1更改为MOV DL,[VAR1]。方括号[]通常表示您想从记忆而不是VAR的偏移量的下半部分,愚蠢的emu不明白你的意图。 -
你用的是fasm吗?源代码中的指令看起来像 fasm。
-
不,只有 Emu8086... 但是问题是 VAR1 [ ] 中带括号的求解器
标签: assembly ascii x86-16 emu8086