汇编 ---- 第四章 相同功能更少指令

第一节 跳过数据区

	jmp near start
	;跳过下面的数据区
mytext db 'L', 0x07, 'a', 0x07, 'b', 0x07, 'e', 0x07, '1', 0x07, ' ', 0x07, 'o', 0x07, \ 'f', 0x07, 'f', 0x07, 's', 0x07, 'e', 0x07, 't', 0x07, 0x07, ':', 0x07
;标号:mytext,通过db指令预先存储指令的开头字符,从而使数据和指令分离
number db 0, 0, 0, 0, 0
start:
	mov ax, 0x07c0
	... ...
  • \作用:连接字符串
  • jmp near start:使处理器跳转到指定的标号位置处执行程序
    • 第一条指令执行完成后,处理器会跳转到start位置处执行start位置处的指令
  • number db 0, 0, 0, 0, 0:预留内存,以备将来用于存储除法运算所得到的余数(标号十进制各个数位上的值)
  • start:标号,可单独占一行,由于start后没有指令,所以也就不存在汇编地址,故start的值等于紧挨着的下一行指令的汇编地址,处理器执行改行指令,效果与start: mov ax, 0x07c0相同

第二节 初始化段地址

  • 程序被加载到段地址为0000,偏移地址为7c00的位置处,由于程序不是从段开始的位置处加载的,所以在访问程序中内存单元的时候需要用7c000000之间的部分加上内存单元在程序中的偏移地址(汇编地址)得到内存单元在段内的偏移地址7c00+汇编地址
    • 段地址0000与程序加载的起始位置7c00会形成一个距离差,故每次访问内存单元的时候需要给内存单元中的汇编地址加上一个偏移地址
      - [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-htQ5rEhu-1578108359820)(E:\workspace\TyporaProjects\C笔记\汇编\images\第四章 相同功能更少指令\2-1.png)]
  • 程序开始加载时的内存地址为07c00,对于内存地址来说,可以拥有多个逻辑地址( 0000:7c0007c00:0000 ),内存地址是由段地址加偏移地址所组成,故内存地址的段地址可以看作000007c0,偏移地址则可以看作7c000000
    • 第一种情况:0000:7c00
      • 段地址(0000)左移4位,得到一个20位的段地址(00000),加上偏移地址(7c00),结果仍为7c00
    • 第二种情况:07c0:0000
      • 段地址(07c0)左移4位,得到一个20位的段地址(07c00),加上偏移地址(0000),结果仍为7c00
    • 两种情况效果相同,指向同一位置7c00,但第二种情况较第一种情况简单,在第二种情况中,将数据段寄存器DS中的值设置为07c0,也就是说段的开始位置是7c00,程序开始加载的位置是0000,处于同一行,换句话说,程序是从段开始的位置加载的,不需要再加偏移地址
      - [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xZsk5pLu-1578108359822)(E:\workspace\TyporaProjects\C笔记\汇编\images\第四章 相同功能更少指令\2-2.png)]
  • 内存地址可以有多个逻辑地址,只要段地址左移四位以后加上偏移地址能够指向目标地址即可
mov ax, 0x07c0
mov ds, ax
;将07c0存储到数据段寄存器DS中,作为程序的段地址(此时未对程序进行分段,不能作为数据段的段地址)
;此处两行代码的目的是为后续访问的程序中的内存单元做准备

mov ax, 0xb800
mov es, ax
;将b800存储到附加段寄存器ES中,b800为显存的段地址
;此处两行代码的目的是为后续访问显存中的内存单元做准备

第三节 MovsbMovsw

  • Movsb(byte)和Movsw(word)
    • 作用:数据的批量传送
    • 使用规则:
      • 所要传送的数据:DS:SI
        • 传送数据的位置由数据段寄存器DS和源变址寄存器SI指定,数据的段地址存储在DS寄存器中,偏移地址存储在SI寄存器中
      • 所要传送的位置:ES:DI
        • 目标位置由附加段寄存器ES和目的变址寄存器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值