汇编语言学习第二天

Loop指令和[BX]

1、loop指令格式:loop 标号(在汇编语言中,标号代表一个地址)

2、CPU执行loop指令的时候要进行俩步操作:

  • (cx)=(cx)-1
  • 判断cx中的值,不为零则转至标号处执行程序,如果为零则向下执行

3、 cx和loop指令相配合实现循环:

  • 在cx中存放循环次数
  • loop指令中的标号所标识的地址要在前面
  • 要循环执行的程序段,要写在标号和loop指令的中间
	mov cx,循环次数
s:
	循环执行的程序段
	loop s

4、 大于9FFFh的16进制的数据,在书写的时候都是以字母开头的,而在汇编源程序中,数据不能以字母开头,所以要在前面加零。因此ffffh要写成了0ffffh

5、Debug和汇编编译器masm对指令有不同的处理
(1)在汇编源程序中,如果用指令访问一个内存单元,则在指令中必须用[...]来表示内存单元,如果[]里用一个常量idata直接给出内存单元的偏移地址,就要在[]的前面显示的给出段地址所在的段寄存器。

mov ax,ds:[idata]					;data是一个常量

如果没有在[]的前面显示的给出段地址所在的段寄存器,那么编译器masm将把指令中的[idata]解释为idata

mov ax,[idata]					;data是一个常量

(2)如果在[]里用寄存器,间接的给出内存单元的偏移地址,则段地址默认在ds中。

6、关于俩个运算对象类型不匹配和结果可能超界的情况:
(1)(dx)=(dx)+内存中的8位数据
(2)(dl)=(dl)+内存中的8位数据

assume cs:code
code segment
		mov ax,0ffffh
		mov ds,ax				;(ds)=ffffh
		
		mov ax,0020h
		mov es,ax				;(es)=0020h
		
		mov bx,0				;(bx)=0,此时ds:bx=ffff:0,es:bx=0020:0
	
		mov cx,12				;循环12次
		
s:		mov dl,[bx]				;将ds:bx的数据送入dl
		mov es:[bx],dl			;将dl中的数据送入es:bx
		inc bx					;(bx)=(bx)=1
		loop s					
		
		mov ax,4c00h
		int 21h					;程序返回
code ends
end		
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值