NASM(二)反转字符串与冒泡排序


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

声明:Hello World|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - NASM(二)反转字符串与冒泡排序


我的朋友,理论是灰色的,而生活之树是常青的!