[024][汇编语言]检测点6.1 在同一个代码段里使用数据和栈

程序6.2

功能: 8个数据加和计算

assume cs:code

code segment
    
    dw 0123H,0456H,0789H,0abcH,0defH,0fedH,0cbaH,0987H

    start:  mov bx,0
            mov ax,0

            mov cx,8
        s:  add ax,cs:[bx]
            add bx,2
            loop s

            mov ax,4c00H
            int 21H
    code ends
    end start

  • start 指明程序的入口所在,即 CS:IP
  • dw 即(define word),定义 型数据

程序加载到内存后

  • 8个字型数据,占用16个内存单元
  • 用 dw 定义的数据 被放在 从CS:0 开始到 CS:F 的前16个内存单元里面
  • 后面的内存单元从CS:0010 开始,存放汇编指令对应的机器码
    [024][汇编语言]检测点6.1 在同一个代码段里使用数据和栈_第1张图片
    CS IP 指明程序的入口(指令的开始).png

检测点6.1

第一问

[024][汇编语言]检测点6.1 在同一个代码段里使用数据和栈_第2张图片
检测点6.1 第一问.png

审题: 什么叫用内存单元中的内容改写程序中的数据?

  • 程序中的数据,就是dw关键词后面那一串8个数据,要改写这些数据,就是要找到这些数据所在的位置(内存单元的地址),而这些数据就排在 从 CS:0 开始到 CS:F 的前 16个内存单元,使用 CS:[bx] 依次访问即可

第二问

[024][汇编语言]检测点6.1 在同一个代码段里使用数据和栈_第3张图片
检测点6.1 第二问.png

审题:如何使用栈来传送数据?

  • 完全参考书上 程序6.3 来写
  • 第一个dw关键词开辟了8个字的空间,并且存入了数据
  • 第二个dw关键词开辟了10个字的空间,用作栈空间
  • 可以计算出栈顶的偏移地址 SP = (8+10)x2= 36 =24H
  • 8个字的数据依旧使用 CS:[bx] 来访问
  • 弹出操作 pop 即可

简单复习

  • 复习寄存器CS 与 DS 的区别
    https://www.jianshu.com/p/7940204db608
  • 复习出栈、入栈操作
    https://www.jianshu.com/p/4d8ca702549d
    https://www.jianshu.com/p/e9982ba1a5b4

你可能感兴趣的:([024][汇编语言]检测点6.1 在同一个代码段里使用数据和栈)