【问题标题】:How can I read data from data segment using x86 assembly?如何使用 x86 程序集从数据段中读取数据?
【发布时间】:2012-11-29 03:46:50
【问题描述】:

我使用的是 nasm32、x86 汇编语言。我想从数据段中读取一些数字。

.model small 
.stack
.data 
  DATA1 DB 53H,"$"
  DATA2 DB 17H,"$"
.code
.startup
  mov dx, @data
  mov dx, offset DATA1
  add dl,30h
  mov ah, 02h
  int 21h

  mov dl, dh
  add dl, 30h
  mov ah, 02h
  int 12h
  .exit
end

这段代码只返回

20

我认为 DATA1 53h (= 83 (decimal)) 值会返回。 (ASCII字符)

但奇怪的数字是返回。发生了什么?我不明白这个结果。

我该如何修复这个代码?

【问题讨论】:

    标签: assembly x86 nasm data-segment


    【解决方案1】:

    你没有设置 ds。

    mov dx, @data
    

    你的意思是这样的:

    push @data
    pop ds
    

    【讨论】:

    • int21h, AH = 02h 将字符输出到 dl 中,您将 dx 初始化为 DATA1 的地址,而不是该地址上的数据。第三,53h是'S',为什么要打印'20'?
    • 感谢您的回答!那么,如何读取 DATA1 地址上的数据?并且,“MOV DX,偏移 DATA1”表示 DX
    • 试试 mov dl, [DATA1]。没有单个数字 '83',所以如果你需要输出一个大于 10 的数字,你需要一个 int2string 例程。
    • 你的意思肯定不是int 12h! ...这看起来像 Masm/Tasm/Jwasm - 绝对不是 Nasm。 ...但是尝试mov ax, @data `mov ds, ax` 来设置您的数据段...
    • 哇!感谢你所做的一切!!是的! 'int 12h' 未键入。'int 21h' 是正确的。很抱歉造成混淆;
    猜你喜欢
    • 2012-12-20
    • 2021-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-19
    • 2014-12-22
    • 1970-01-01
    • 2022-10-18
    相关资源
    最近更新 更多