【问题标题】:Printing an integer (as variable) in x86 [duplicate]在x86中打印一个整数(作为变量)[重复]
【发布时间】:2015-04-03 00:45:11
【问题描述】:

我有一个全局变量,用于计算函数被访问的次数。每次我访问特定函数时,该函数的最后一行是这样的:add var_count, 1.

然后,我有另一个函数打印这个全局变量,问题是:我不能打印它...

这是我要打印的代码:

.data

var_count db 0

.code

...piece of code


mov ah,9
lea dx, var_count
int 21h


...piece of code

【问题讨论】:

  • 这可能会有所帮助:stackoverflow.com/q/13166064/3258851
  • 你确定1个字节就够了吗?
  • function 09h in 21h 打印字符串。不能直接打印数字。当你想做的时候,你必须编写自己的程序来做。如何?通过将存储在变量中的值除以 10,然后将字符 '0' 的 ascii 代码添加到提醒中,然后使用某些打印字符的功能打印该值,例如功能 02h。如需更多信息和指导,只需在 stackoverflow 上搜索类似问题。
  • 我做了这个,但它以相反的顺序打印数字:'mov al, var_number mov ah ,0 mov cx, 10 loopit: mov dx, 0 div cx push ax add dl,'0' mov ah,2 int 21h pop ax cmp ax,0 jnz loopit´

标签: assembly x86


【解决方案1】:

这就是您的程序可能变成的样子。我使用了您在评论中编写的大部分代码。在创建数字的文本版本时,我们从末尾开始写入并移向开头。

.data

var_count db 0
txt_buffer db '   ','$'  ;3 spaces is enough when converting a byte

.code

...piece of code

 mov di, offset txt_buffer + 3
 mov al, var_count
 mov ah ,0
 mov cx, 10
loopit:
 mov dx, 0
 div cx
 add dl,'0'
 dec di
 mov [di], dl
 cmp ax,0
 jnz loopit
 mov dx, di
 mov ah, 9
 int 21h

...piece of code

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    • 2017-05-30
    • 2018-12-23
    • 2023-01-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多