自己用nasm写了一个大小写转换的小程序,哈哈是在圣诞节写的,算不算新年的第一次commit呢
总结一下:
int 80h是linux在中断向量表里的中断处理,他会读取eax里的值。
比如1是exit system call
3 is system read
4 is system write
equ在nasm里的用途是计算字符串的长度
代码如下:
; name : uppercaser.asm
; version : 1.0
; create time : 12/24/2014
; Marry Christmas!!!! happy New Year ASM!!!!!
; last modified : 12/24/2014
; anthor : JohnnySun
; nasm -f elf64 -g -F stabs uppercaser.asm
; ld -o uppercaser uppercaser.o
;</p>section .bss
BUFFLEN equ 4096
Buff: resb BUFFLENsection .data
section .text
global _start_start:
nopread:
mov eax, 3 ; use sys_read system call
mov ebx, 0 ; use stdin
mov ecx, Buff
mov edx, BUFFLEN
int 80H
mov esi, eax ; save sys_read return
;cmp eax, 0 ; if eax = 0 then read EOF
;je Donemov ecx, esi
mov ebp, BuffScan:
dec ecx ;ebp offset -1
cmp byte [ebp+ecx], 61h
jb Next ; if < acmp byte [ebp+ecx], 7Ah
ja Next ; if > b;Now we got
sub byte [ebp+ecx], 20hNext:
cmp ecx, 0
jnz ScanWrite:
mov eax, 4 ; use sys_write system_call
mov ebx, 1 ; use stdout
mov ecx, Buff
mov edx, esi
int 80H
jmp readDone:
mov eax, 1 ;exit system call
mov ebx, 0 ; return 0
int 80H
</pre>