相关疑难解决方法(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万
查看次数

在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
查看次数

用DOS显示数字

我的任务是编写一个显示程序PSP线性地址的程序.我写了以下内容:

        ORG     256

        mov     dx,Msg
        mov     ah,09h          ;DOS.WriteStringToStandardOutput
        int     21h
        mov     ax,ds
        mov     dx,16
        mul     dx              ; -> Linear address is now in DX:AX

        ???

        mov     ax,4C00h        ;DOS.TerminateWithExitCode
        int     21h
; ------------------------------
Msg:    db      'PSP is at linear address $'
Run Code Online (Sandbox Code Playgroud)

我搜索了DOS api(使用Ralph Brown的中断列表)并没有找到输出数字的单个函数!我错过了吗,我该怎么办?

我想以DX:AX十进制显示数字.

assembly dos integer-division x86-16 signed-integer

4
推荐指数
1
解决办法
873
查看次数