• 实验2 用机器指令和汇编指令编程


    (注:本文默认数字为16进制数)

    实验2.1

    首先:使用 e 命令修改 0021:0~0021:f 数据,及修改后查看是否正确写入。

      输入代码前的预判:

    mov ax,0021
    mov ds,ax
    
    mov ax,2200
    mov ss,ax
    
    mov ss,ax
    
    mov sp,0100
    
    mov ax,[0]             ;ax=3130;
    add ax,[2]             ;ax=3130+3332=6462;
    mov bx,[4]             ;bx=3534;
    add bx,[6]             ;ba=3534+3736=6C6A;
    
    push ax                ;sp=00FE;修改的内存单元的地址是2200:00FE,内容为6462
    push bx                ;sp=00FC;修改的内存单元的地址是2200:00FC,内容为6C6A
    pop  ax                ;sp=00FE;ax=6C6A;弹出栈顶6C6A的值赋给AX
    pop  bx                ;sp=0100;bx=6462;弹出栈底6462的值赋给BX
    
    push [4]               ;sp=00FE;修改的内存单元的地址是2200:00FE,内容是3534
    push [6]               ;sp=00FC;修改的内存单元的地址是2200:00FC,内容是3736

      用a命令输入代码。

      

      使用t/p命令单步执行命令

      实验结果与预期一样,证明书上知识的准确与真实性。达到实验效果。

    实验2.2

      实验代码

    1 mov ax,2000    ;将2000赋给AX
    2 mov ss,ax    ;将AX的值赋给SS,由于物理原因,不能直接赋值
    3 mov sp,10    ;将10赋给sp,栈顶是20010,栈底是20000,栈段是20000~20010
    4 mov ax,3123   ;将3123赋给AX
    5 push ax        ; AX进栈
    6 mov ax,3366    ;将3366值赋给AX    
    7 push ax        ;AX出栈

      在debug的状态下,输入上述代码,并使用 e 命令修改 2000:0~2000:f 的值,及修改后查看的部分 。

      使用t命令单步调试每一行汇编指令,并使用 d 命令查看 2000:0~2000:f 的值。

      猜测:由于某种机制,导致单步运行,中断时将无关元素不停地压入栈内。

     实验总结与体会:

        汇编语言是门靠近底层的语言,学习这门语言可以了解到计算机底层工作机制。这些机制繁琐、复杂、易错,学习过程让我深刻地体会到了初代计算机人的心酸。但同时能够帮助我们更好地理解计算机的运行,与学习高级语言。这反而激起我对汇编这门语言的兴趣。 

  • 相关阅读:
    来自网络的双参求范围问题,没有单参求范围那么有套路!
    svn更改用户问题
    html控件中上传文件的技巧
    认识jsp
    dom4j 解析XML文件
    BaseDao优化
    JDBC连接数据库
    javascript常用函数
    jQuery formValidator(插件)
    javascriptDetect对象封装
  • 原文地址:https://www.cnblogs.com/auspice/p/9858918.html
Copyright © 2020-2023  润新知