汇编语言读书笔记 第三章

第三章 寄存器(内存访问)

3.1 内存中字的存储

内存中用两个连续的内存单元存放一个字,低内存地址存放低8位,高内存地址存放高8位

3.2 DS和[address]

内存段地址使用DS寄存器保存,基地址采用[0]这样的方式代表

3.3 字的传送

CPU将字写到内存时,低8位在写入内存的起始地址,高8位写入下一个地址
CPU读取内存是,默认读取一个字

3.4 mov、add、sub指令

mov 寄存器,数据
mov 寄存器,寄存器
mov 寄存器,内存单元
mov 寄存器,段寄存器
mov 内存单元,寄存器
mov 内存单元,段寄存器
mov 段寄存器,寄存器
mov 段寄存器,内存单元

3.1 检测点

  1. 在Debug中,用d 0:0 1f查看内存,结果如下
0000:0000 70 80 F0 30 EF 60 30 E2-00 80 80 12 66 20 22 60
0000:0010 62 26 E6 D6 CC 2E 3C 3B-AB BA 00 00 26 06 66 88

下面的程序执行前。AX=0,BX=0写出每条汇编指令执行完后相关寄存器中的值

  • mov ax,1
  • mov ds,ax
  • mov ax,[0000] AX=(2662H) 解析:此时访问的内存地址为1:0等同于0:10
  • mov bx,[0001] BX=(E626H)
  • mov ax,bx AX =(E626H)
  • mov ax,[0000] AX=(2662H)
  • mov bx,[0002] BX=(D6E6H)
  • add ax,bx AX=(FD48H)
  • add ax,[0004] AX=(2C14H)
  • mov ax,0 AX=(0)
  • mov al,[0002] AX=(00E6H)
  • mov bx,0 BX=(0)
  • mov bl,[000C] BX=(0026H)
  • add al,bl AX=(000CH)
  1. 3.6

    答:程序和数据没有区别,本质上都是二进制码,关键在于CPU如何解读

    1. mov ax,6622H cs=2000H ip=0003H ax=6622H
    2. jmp 0FF0:0100 cs=0FF0H ip=0100H
    3. mov ax,2000H cs=0FF0H ip=0103H ax=2000H
    4. mov ds,ax cs=0FF0H ip=0105H ds=2000H
    5. mov ax,[0008] cs=0FF0H ip=0108H ax=c389H
    6. mov ax,[0002] cs=0FF0H ip=010BH ax=EA66H

3.6 栈

后进先出

3.7 CPU提供的栈机制

  • 指令:PUSH(入栈),POP(出栈)
    • push/pop 寄存器
    • push/pop 段寄存器
    • push/pop 内存单元
  • 栈相关的寄存器:段寄存器SS,偏移地址寄存器SP任意时刻,SS:SP指向栈顶元素
  • 栈为空时,SS:SP指向大的内存地址,入栈时,SP-2

3.8 栈顶超界问题

  • 栈顶超界的问题需要我们自己处理,CPU没有提供相关机制

3.9 push、pop指令

  • push 先将SP-2在向SS:SP的字单元中送入数据
  • pop 先从SS:SP指向的字单元中读取数据,在SP+2

3.10 栈段

  • 将栈的大小定义为64KB,得到一个环绕的栈
  • 对于数据段,将它的段地址放在DS
  • 对于代码段,将他的段地址放在CS
  • 对于栈段,将他的段地址放在SS

3.2 检测点

  1. 3.17
    • mov ax,1000H
    • mov ds,ax
    • (add ax,ax)
    • (mov ss,ax)
    • (mov sp,10H)
    • push [0]
    • push [2]
    • push [4]
    • push [6]
    • push [8]
    • push [A]
    • push [C]
    • push [E]
  2. 补全下面的程序,使其可以将10000H~1000FH中的8个字,逆序复制到20000H~2000FH中
    • mov ax,2000H
    • mov ds,ax
    • mov ax,1000H
    • mov ss,1000H
    • mov sp:0H
    • pop [E]
    • pop [C]
    • ...

3.3 实验2 用机器指令会汇编指令编程

  • Debug的t命令在执行修改寄存器SS的指令时,下一条指令也紧接着被执行
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值