汇编语言读书笔记 第五章

第五章 [BX]和loop指令

  • [bx]表示内存地址,内存地址为bx的值,这里只能使用bx
  • loop循环指令
  • inc 寄存器寄存器中的值自增

5.2 Loop指令

  • 格式loop 标号,cpu执行loop指令时进行两步操作
    1. cx=cx-1
    2. 判断cx中的值是否不为0,不为零跳转至标号处执行程序,如果为零则向下执行
  • s:标号,代表一个内存地址,s可替换为任意合法字符
  • 下面是一个实例计算2的11次方
assume cs:code
code segment
	mov ax,2
	mov cx,11
s:	add ax,ax
	loop s
	
	mov ax,4c00H
	int 21h
code ends
end

5.3 在DEBUG中跟踪用loop指令实现的循环程序

  • 数据长度不一致可以用寄存器暂存数据
  • 汇编源程序中数据不能以字母开头,要在前面加0,数据尾部有H表示才是16进制的数据
  • 单步执行为t命令,跳过循环可以使用p命令(要在loop命令处使用),跳转到指定地址跟踪使用g 内存地址实现

5.4 Debug和汇编编译器masm对指令的不同处理

  • 在debug中[0]表示内存单元0的数据,但在汇编源程序中会被当作0进行处理,在对[bx]上的处理是一致的

5.5 loop和[bx]的联合应用

  • 计算ffff:0-ffff:b单元中的数据的和,结果存储在dx中
assume cs:code
code segment
	;初始化
	mov ax,0ffffH
	mov ds,ax
	mov bx,0
	mov dx,0
	mov cx,12	;初始化循环计数寄存器
	
s:	mov al,[bx]
	mov ah,0
	add dx,ax
	inc bx
	loop s
	
	mov ax 4c00H
	int 21H
code ends
end

5.6 段前缀

  • 访问内存时使用默认的ds作为段地址,我们也可以显示指定其他合法寄存器比如 mov ax,ss:[bx]
  • ds:,cs:,ss:,es:都可以用于显示地指明内存单元得段地址,这在汇编语言中称为***段前缀***
  • 在需要频繁切换段地址的时候可以使用***段前缀***

实验4 [bx]和loop的使用

  1. 编程,向内存0:200~0:23f依次传送数据0~63(3fh)
  2. 编程,在1的条件下,程序中只能使用9条指令,包括mov ax,4c00hint21h
;向内存`0:200~0:23f`依次传送数据0~63(3fh)
;解析内存范围等同于20:00~20:3f
assume cs:code
code segment
    ;初始化
    mov ax,20h
    mov ds,ax
    mov bx,0
    mov cx,40h

s:  mov [bx],bx
    inc bx
    loop s

    mov ax,4c00h
    int 21h
code ends
end
  1. 下面的的程序功能是将mov ax,4c00h之前的指令复制到内存0:200处,补全程序
;; 复制的是指令数据,从`mov ax,cx`到`loop s`
;; 程序在debug加载时cx存放程序的字节数,我们可以通过其他方式获得“程序退出”指令占用了5个字节,所以要复制的字节数量为cx-5,感觉这个还是有点问题的,因为我们在不运行程序的情况下不能得到cx的值,虽然我们可以随便填充数据让程序可执行拿到cx的值
assume cs:code	;这是伪指令
code segment	;这是伪指令
	mov ax,cs	;cs存放了指令的起始地址
	mov ds,ax
	mov ax,0020h
	mov es,ax
	mov bx,0
	mov cx,17h ;这个程序一共17字节(cx-5 `mov...int 21h`一共占用5个字节,程序初始化时,cx保存了程序的字节数)
s:	mov al,[bx]
	mov es:[bx],al
	inc bx
	loop s
	
	mov ax,4c00h
	int 21h
code ends
end
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值