• 王爽汇编实验(三)


      王爽汇编浅显易懂,虽然前面两个实验都做完了,但是都是吊儿郎当做完的。

      看到第三次实验比较好写心得,就写了。

    原码如下,用提到的LINK.EXE和MASM.EXE进行编译链接操作。

    assume cs:codesg
    codesg segment
    mov ax,2000H
    mov ss,ax
    mov sp,0
    add sp,10
    pop ax
    pop bx
    push ax
    push bx
    pop ax
    pop bx

    mov ax,4c00H
    int 21H
    codesg ends
    end


      首先是用debug 跟踪t1.exe执行过程,写出每一步执行后,相关寄存器中的内容和栈顶的内容。

    程序即将开始运行,这时候给出了下一条指令 mov ax,2000H

    这时候ax至FFFF,DS和CS差10H,IP偏移地址为0。

    输入t执行,可以看到ax已经变成2000H了,因为是寄存器和立即数,所以占3个字节,IP变成0003,其他未变。

    继续t执行。

    ss变成了ax内存放的2000H。中间原本有一行指令 mov sp,0但是因为debug的对栈操作,直接在mov ss,ax后立刻执行,所以下一条语句是add sp,10

    sp变成了000AH

    因为pop的缘故,栈向上增长,sp增加了2字节,变成000CH

    同理sp=000EH,这时候发现了AX从2000H变成了0000H,因为栈本来就是空的,又无故出栈,pop把SS:SP当时的字单元给到了AX,于是AX置0,如果BX有值的话也为0。

    SP变了回去,因为POP和PUSH都用一个字节,IP每次增长1H。

    后面其实也可以看到,SP又反弹了=-=。

    最后两个是返回语句,AX变成4C00H,IP+3,指令地址又变成CS:IP=F000:14A0。

    至此第二问结束。

    (3)PSP的头两个字节是CD 20。用DEBUG加载t1.exe,查看PSP的内容。

    PSP就是DS和CS之间的0010H*16=256字节

    下面就不必要看了,就是这256字节就是t1.exe的说明。

    实验结束,开开心心

  • 相关阅读:
    【TouchGFX】使用CubeMX创建touchgfx项目 -- 初始篇
    opencv haarcascades 下载
    更换 Anaconda 源(贼快)
    yii2 允许跨域
    sublime text 3 安装 pyv8 失败的解决办法
    win10 anaconda cuda11.1 安装 tensorlfow-gpu 环境
    nginx 403转404
    python requests 全部异常
    win10 anaconda 安装 tensorflow-gpu 及 jupyter notebook
    【PHP】自有图片服务器,图片动态裁剪缩放
  • 原文地址:https://www.cnblogs.com/otakus/p/wsassembly03.html
Copyright © 2020-2023  润新知