NASM(二)
反转字符串
描述:反转字符串“string”,并将其在屏幕上显示出来。
main:
mov ax, 0x7c0
mov ds, ax
mov ax, 0x7c00
mov ss, ax ; 初始化栈指针
mov sp, ax
mov ax, 0xb800 ; 显存区
mov es, ax
; 准备循环push
mov cx, 6
mov di, data
push_data:
xor bx, bx
mov bl, [di]
push bx ; push 每次push一个字
inc di
loop push_data
; 准备循环pop
mov cx, 6
mov di, data
pop_data:
pop bx ; pop 每次pop一个字
mov [di], bl
inc di
loop pop_data
; 准备将数据显示
mov cx, 6
mov si, data
mov ax, 0
mov di, 0
show:
mov byte bl, [si]
inc si
mov [es:di], bl
inc di
mov byte [es:di], 0x07
inc di
loop show
jmp near $
data:
db "string"
times 6 db 0
end_file:
times 510-($-$$) db 0
db 0x55
db 0xaa
冒泡排序
描述:0-9随机排列的字符串又从小到大排序,然后在屏幕上显示出来。
main:
mov ax, 0x7c0
mov ds, ax
mov ax, 0xb800
mov es, ax
mov ax, 9 ; 外部循环控制
out_loop:
mov bx, 9 ; 内部循环控制
mov si, data
in_loop:
mov dl, [si]
inc si
mov dh, [si]
cmp dh, dl
jge no_move
mov [si], dl
mov [si - 1], dh
no_move:
dec bx
cmp bx, 0
jne in_loop
in_loop_finish:
dec ax
cmp ax, 0
jne out_loop ; 外部循环
out_loop_finish:
; show result
mov cx, 10
mov si, data
mov ax, 0
mov di, 0
show:
mov byte bl, [si]
inc si
mov [es:di], bl
inc di
mov byte [es:di], 0x07
inc di
loop show
jmp near $
data:
db '9756823410'
end_file:
times 510-($-$$) db 0
db 0x55
db 0xaa
Comments | NOTHING