|  | 
 
| 
本帖最后由 shuiyu 于 2017-8-14 12:06 编辑
x
马上注册,结交更多好友,享用更多功能^_^您需要 登录 才可以下载或查看,没有账号?立即注册  
 越努力,越幸运。欢迎大家来看我的笔记
  小白刚学,不对的请各位大佬指正,谢谢   
 一、jcxz指令
 (1)jcxz指令为有条件转移指令,所有的有条件转移指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址。对IP的修改范围都为-128~127。指令格式:jcxz 标号
 
 (2)当(cx)=0时,(IP)=(IP)+8位位移)
 8位位移=“标号”处的地址-jcxz指令后的第一个字节的地址;
 8位位移的范围为-128~127,用补码表示;
 8位位移由编译程序在编译时算出。
 
 (3)当(cx)!=0时,什么也不做(程序向下执行)。
 
 二、loop指令
 (1)在前面的学习中我们都有用过了,和上面的jcxz指令可以说是相反
   
 (2)loop指令为循环指令,所有的循环指令都是短转移,在对应的机器码中包含转移的位移,而不是目的地址。对IP的修改范围都为-128~127。
 指令格式:loop 标号
 
 (3)如果(cx)≠0,(IP)=(IP)+8位位移。
 8位位移=“标号”处的地址-loop指令后的第一个字节的地址;
 8位位移的范围为-128~127,用补码表示;
 8位位移由编译程序在编译时算出。
 
 (4)当(cx)=0,什么也不做(程序向下执行)
 
 
 
 检测点9.2
 
 补全编程,利用jcxz指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。
 
 assume cs:code
 
 code segment
 start: mov ax,2000h
 mov ds,ax
 mov bx,0
 
 
 s:      mov ch,0
 mov cl,[bx]
 jcxz ok
 inc bx
 
 jmp short s
 ok: mov dx,bx
 mov ax ,4c00h
 int 21h
 
 code ends
 end start
 
 解:
 (1)因为题目要求查找的是字节,故我们要使用字节类的寄存器,而又因为我们是要用jcxz指令完成跳转的;jcxz指令的跳转是看CX的值得,所以我们用ch、cl
   (2)把每个内存单元依次赋值给CX
 (3)如果CX=0时,jcxz跳转到标号OK处,不等于零的话就继续执行下面的指令。
 (4)使[bx]自加1,这样才能循环赋值,因为下面有一个jmp s,就和循环似的。
 
 检测点9.3
 
 补全编程,利用loop指令,实现在内存2000H段中查找第一个值为0的字节,找到后,将它的偏移地址存储在dx中。
 
 assume cs:code
 code segment
 start:  mov ax,2000h
 mov ds,ax
 mov bx,0
 s:        mov cl,[bx]
 mov ch,0
 inc cx
 inc bx
 loop s
 
 ok:dec bx
 mov dx,bx
 mov ax,4c00h
 int 21h
 
 code ends
 end start
 
 解:因为执行loop s时,首先要将(cx)减1。所以要先让CX加一。
 
 
 
 谢谢小甲鱼带来的视频教程,感谢!!
   
 本节结束,多谢览阅!
 越努力,越幸运。谢谢大家来看我的笔记
  小白刚学,不对的请各位大佬指教,谢谢   | 
 评分
查看全部评分
 |