【问题标题】:Problem with assembly (emu8086): It doesn't print the right value装配问题 (emu8086):它没有打印正确的值
【发布时间】: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


【解决方案1】:

在数据段中,您需要在值之后附加 h 所以你的数据段应该是这样的。

VAR1 DB 05h

【讨论】:

    猜你喜欢
    • 2015-08-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-01
    • 1970-01-01
    • 2019-11-29
    • 2021-04-29
    • 1970-01-01
    相关资源
    最近更新 更多