不显示控制台上的号码
No shows me the number on console
我在汇编程序中有以下代码:
控制台中没有显示任何内容,我希望你显示最终数字。
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
警告,这个答案对你没有帮助,你需要的是获得一些调试器并学习使用它(gdb 在 *NIX 中几乎无处不在,所以学习一次会很好地为你服务。我什么都不记得了,所以我使用了一些 GUI 的东西,它几乎总是有一些错误,但是 "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
我在汇编程序中有以下代码:
控制台中没有显示任何内容,我希望你显示最终数字。
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
警告,这个答案对你没有帮助,你需要的是获得一些调试器并学习使用它(gdb 在 *NIX 中几乎无处不在,所以学习一次会很好地为你服务。我什么都不记得了,所以我使用了一些 GUI 的东西,它几乎总是有一些错误,但是 "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