【发布时间】:2016-01-10 07:53:26
【问题描述】:
我已经编写了一个程序,以在 x64 汇编语言(nasm)中添加数组元素。但是当我显示总和时,它会显示一些其他不可读的结果。于是查询了一下,发现需要把sum转换成ASCII格式再显示出来。但我无法弄清楚这部分代码的作用。我已经将那部分代码嵌入到我的程序中,现在它工作正常,但我无法理解这段代码的实际作用。这是我的程序:
global _start
section .data
arr1 dq 0000000000000001h,0000000000000002h,0000000000000003h,0000000000000004h,0000000000000005h
carry db 00
msg1 db 'Addition Is:',10
len1 equ $-msg1
msg2 db " "
len2 equ $-msg1
section .bss
addition resb 16
section .text
_start:
mov cl,4
mov rsi,arr1
mov rax,[rsi]
up: add rsi,8
add rax,[rsi]
jnc a1
inc byte[carry]
a1: dec cl
jnz up
call display ;ASCII conversion procedure display called
mov rax,1
mov rdi,1
mov rsi,msg1
mov rdx,len1
syscall
add byte[carry],30h
mov rax,1
mov rdi,1
mov rsi,carry
mov rdx,1
syscall
mov rax,1
mov rdi,1
mov rsi,addition
mov rdx,16
syscall
mov rax,60
mov rdi,0
syscall
display:mov rdi,addition ;How this procedure converts the addition into ASCII
mov cl,16
up1: rol rax,4
mov rbx,rax
and rax,0Fh
cmp rax,09h
ja dn1
add rax,30h
jmp dn
dn1: add rax,37h
dn: mov [rdi],rax
mov rax,rbx
inc rdi
dec cl
jnz up1
ret
【问题讨论】: