没有显示控制台上的数字

时间:2016-09-27 22:55:09

标签: assembly console numbers show

我在汇编程序中有以下代码:

发生的事情是在控制台中没有显示任何内容,我希望您向我显示最终的数字。

section .text
global _start
_start:

inicio:     
    mov ax,12345
    mov cx,5
    mov dx,0
imprime:
    mov bx,10
    div bx
    add dl,30h
    mov dh,0
    push dx
    mov dx,0

    loop imprime 
    mov cx,5
    imp:    
        mov ah,02h
        pop dx 
        int 0x80
        loop imp

mov rax, 60
mov rdi, 0
syscall

我把int 21h打印出来并没有离开我,我改变了int 0x80

1 个答案:

答案 0 :(得分:1)

警告,这个答案对你没有帮助,你需要的是得到一些调试器并学会使用它( gdb 几乎在* NIX中无处不在,所以学习它一次会为你提供良好的服务。我什么都记不清了,所以我使用了一些GUI的东西,几乎总是有一些bug,但“edb”对于我这个小asm来说还可以。)

这是你的一些固定的linux 64b汇编代码,对我有用:

; Kate build command (%f = file name, %n = name without extension):
; nasm -f elf64 -l %n.lst %f; ld -melf_x86_64 -o %n %n.o

section .data
    char_buffer db '_'  ; buffer to store characters to print

section .text
    global _start

_start:
    xor ecx,ecx     ; clear rcx! LOOP in 64b doesn't use only "cx"

    ; store 5 ASCII chars on stack (decimal format of value in ax)
    mov ax,12345
    mov cx,5
    mov dx,0
imprime:
    mov bx,10
    div bx
    add dl,30h
    mov dh,0
    push dx
    mov dx,0
    loop imprime 

    ; print 5 stored ASCII chars on stack
    mov cx,5
    mov rdi,1           ; stdout
    mov rsi,char_buffer ; memory buffer for number
imp:    
    pop dx
    mov [rsi],dl        ; update number in buffer
    mov rax, 1          ; sys_write
    mov rdx, 1          ; 1 byte length
    push rcx            ; rcx is not preserved by syscall
    syscall
    pop rcx             ; restore rcx for LOOP
    loop imp

    ; print new line
    mov [rsi],byte 10   ; NL char into buffer
    mov rax,1           ; sys_write
    ; other arguments are valid from previous call
    syscall

    ; sys_exit
    mov rax,60
    mov rdi,0
    syscall