相关疑难解决方法(0)

如何在没有printf的汇编级编程中从c库中打印整数?

任何人都可以告诉我纯粹的汇编代码以十进制格式显示寄存器中的值吗?请不要建议使用printf hack,然后使用gcc进行编译.

描述:

好吧,我做了一些研究和NASM的一些实验,并认为我可以使用c库中的printf函数来打印整数.我是通过使用GCC编译器编译目标文件来完成的,所有工作都很公平.

但是,我想要实现的是以十进制形式打印存储在任何寄存器中的值.

我做了一些研究,发现DOS命令行的中断向量021h可以显示字符串和字符,而2或9位于ah寄存器中,数据在dx中.

结论:

我找到的所有示例都没有显示如何在不使用C库的printf的情况下以十进制形式显示寄存器的内容值.有没有人知道如何在装配中这样做?

x86 assembly nasm cpu-registers

16
推荐指数
3
解决办法
3万
查看次数

如何在装配NASM中打印数字?

假设我在寄存器中有一个整数,我该如何打印?你能展示一个简单的示例代码吗?

我已经知道如何打印一个字符串,如"你好,世界".

我正在Linux上开发.

linux x86 assembly nasm

15
推荐指数
3
解决办法
3万
查看次数

在Linux上输出程序集中的整数

这需要在纯汇编中完成(即没有库或调用C).

我理解问题的本质:需要将整数除以10,将一位数的余数转换为ASCII,然后输出,然后用商重复该过程.

但由于某种原因,它只是不起作用.我在x86上使用NASM.

这是我现在所拥有的(不输出任何内容,但也不会抛出任何汇编错误):

; integer to output is stored in eax
mov ecx, 10   ; for base 10

loop:
div ecx  ;EAX contains the quotient, EDX the remainder

; Do something to EDX to convert it to ASCII, not sure if this is correct
add edx, '0'

push eax    ;We'll be playing with EAX to output EDX, save EAX to the stack

mov eax, 4              ; sys_write
mov ebx, 1              ; to STDOUT
mov ecx, edx
mov edx, 1 …
Run Code Online (Sandbox Code Playgroud)

x86 assembly nasm

7
推荐指数
1
解决办法
3125
查看次数

标签 统计

assembly ×3

nasm ×3

x86 ×3

cpu-registers ×1

linux ×1