我在汇编程序中有以下代码:
发生的事情是在控制台中没有显示任何内容,我希望您向我显示最终的数字。
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
答案 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