• 汇编程序返回dos


    汇编程序返回dos有两种方式:

    1.            push ds

                   sub ax,ax

                   push ax

                   ...

                   ret

    作用:一开始ds是指向psp的,在psp:0000处放着int 20h(即终止程序的指令),然后用ret,会把psp指向给cs,0给ip,运行int 21h终止代码继续运行

     代码实例:

    data segment
    datatable dw routine_1
    dw routine_2
    dw routine_3
    dw routine_4
    dw routine_5
    dw routine_6
    dw routine_7
    dw routine_8
    result dw ?
    data ends
    ;********************88
    code segment
    main proc far
    assume cs:code, ds:data
    start:
    push ds
    sub ax, ax
    push ax
    mov ax, data
    mov ds, ax
    ;mian proc start here
    ;set al = 1
    mov al, 1
    cmp al, 0
    je coutinue_main_line
    mov si,0
    l:
    shr al, 1
    jnb not_yet
    jmp datatable[si]
    not_yet:
    add si, type datatable
    jmp l
    coutinue_main_line:
    mov result, 1110h
    jmp exit
    routine_1:
    mov result, 1111h
    jmp exit
    routine_2:
    routine_3:
    routine_4:
    routine_5:
    routine_6:
    routine_7:
    routine_8:
    exit:
    ret
    main endp
    code ends
    end start

    2.

    mov ah, 4CH

    int 21H

    代码实例:

    data segment
    datatable dw routine_1
    dw routine_2
    dw routine_3
    dw routine_4
    dw routine_5
    dw routine_6
    dw routine_7
    dw routine_8
    result dw ?
    data ends
    ;********************88
    code segment
    main proc far
    assume cs:code, ds:data
    start:
    mov ax, data
    mov ds, ax
    ;mian proc start here
    ;set al = 1
    mov al, 1
    cmp al, 0
    je coutinue_main_line
    mov si,0
    l:
    shr al, 1
    jnb not_yet
    jmp datatable[si]
    not_yet:
    add si, type datatable
    jmp l
    coutinue_main_line:
    mov result, 1110h
    jmp exit
    routine_1:
    mov result, 1111h
    jmp exit
    routine_2:
    routine_3:
    routine_4:
    routine_5:
    routine_6:
    routine_7:
    routine_8:
    exit:
    mov ah, 4ch
    int 21h
    ret
    main endp
    code ends
    end start

     

  • 相关阅读:
    Redis 查看、删除keys
    gitlab 备份和恢复
    gitlab的搭建
    certbot 域名续期及证书查看
    晴天(周杰伦)
    SSH Permission denied (publickey,gssapi-keyex,gssapi-with-mic)
    jenkins miaration section 1
    jenkins 忘记管理员密码
    Yangk's-树状数组 模板
    codeforces-977F-Consecutive Subsequence【动态规划】
  • 原文地址:https://www.cnblogs.com/liubiyonge/p/9121486.html
Copyright © 2020-2023  润新知