【发布时间】:2016-05-01 21:39:53
【问题描述】:
我正在从教程点查看以下代码:
section .text
global _start ;must be declared for using GCC
_start: ;tell linker entry point
sub ah, ah
mov al, '9'
sub al, '3'
aas
or al, 30h
mov [res], ax
mov edx,len ;message length
mov ecx,msg ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov edx,1 ;message length
mov ecx,res ;message to write
mov ebx,1 ;file descriptor (stdout)
mov eax,4 ;system call number (sys_write)
int 0x80 ;call kernel
mov eax,1 ;system call number (sys_exit)
int 0x80 ;call kernel
section .data
msg db 'The Result is:',0xa
len equ $ - msg
section .bss
res resb 1
我觉得我理解这段代码,除了这行:
or al, 30h
我知道 or 是按位或,而 30h 是二进制的 0011 0000。我不明白为什么代码需要这样做!谁能给我解释一下?
【问题讨论】:
-
它只是将 0..9 范围内的整数值(在本例中为 6)转换为其 ASCII 等效值 (0x36 = '6')。