【汇编语言学习笔记】第五讲.使用JCC指令构造分支与循环

本文详细介绍了16位汇编语言中JCC指令的使用,包括JMP、JE/JZ、JNE、JB、JA等,以及如何利用这些指令实现分支和循环控制。通过实例展示了如何判断条件并执行相应的程序流程,如if条件判断和for循环。同时,讲解了CMP指令在比较操作中的作用,并给出了代码示例。
摘要由CSDN通过智能技术生成

第五讲.使用JCC指令构造分支与循环

assume cs:code,ds:data ;取名为code的代码段和取名为data的数据段

data segment ;数据段开始
buffer db 0DH,0AH,'rkvir$';(16位汇编特有写法)
;buffer db 'rkvir',0(32/64位写法)
data ends  ;数据段结束

code segment ;代码段开始
rkmain proc ;主函数开始
       mov ax,data
       mov ds,ax
       mov dx,offset buffer;将buffer地址传入dx
       mov ah,09H
       int 21H ;将字符串显示出去
       mov ah,07H;键盘输入(类似getchar函数)
       int 21H;调用21号中断
       mov ax,4C00H;退出
       int 21H
rkmain endp ;程序结束

start:call rkmain ;从当前位置跳转到指定指令

code ends  ;代码段结束
end start

flag寄存器

  • CF位:进位位

    如果运算结果的最高位产生一个进位或错位,则CF置1,否则CF清零。

  • ZF位:零值位

    如果运算结果为零则ZF置1。否则清零。

cmp指令

一个对比指令 CMP OPRD1,OPRD2

功能:对两数进行相减进行比较,和SUB指令的唯一不同是,SUB会把相减后的结果存放在数据1中,CMP则不会。CMP会在相减之后去影响标志位

例:

①相等

AX=8

BX=8

CMP AX,BX

AX-BX=0 ZF=1

②AX>BX

AX=8

BX=1

CMP AX,BX

AX-BX=!=0 ZF=0 CF=0

③AX<BX

AX=1

BX=2

CMP AX,BX

此时不够减会发生借位 AX-BX=? CF=1

用于:1.分支 2.循环

那么如何用于分支和循环?

JCC指令

以 J 开头的 ”Jxx“这一类的指令功能都是用于跳转

JMP指令——无条件跳转

格式:JMP address

JE/JZ指令——等于则跳转 ZF=1

JNE address 不等于则跳转 ZF=0

JB address 低于则跳转 CF=1

JA address 高于则跳转 CF=0 && ZF=0

JNA address 不高于则跳转 CF=1 或者 ZF=1

JNB address 不低于则跳转 CF=0

assume cs:code,ds:data ;取名为code的代码段和取名为data的数据段

data segment ;数据段开始
buffer db 0DH,0AH,'rkvir1$';(16位汇编特有写法)字符串
buffer db 0DH,0AH,'rkvir2$'
;buffer db 'rkvir',0(32/64位写法)
data ends  ;数据段结束

code segment ;代码段开始
rkmain proc ;主函数开始
       mov ax,data
       mov ds,ax
       mov dx,offset buffer;将buffer地址传入dx
       mov ah,09H
       int 21H ;将字符串显示出去
       mov ax,1
       mov bx,2
       cmp ax,bx
       ja rk1 ;如果大于 就跳转
       mov dx,offset buffer
       mov ah,09H
       int 21H
rk1: ;跳到此处 (放到跳出指令的上面还是下面都是可以的)
       mov ah,07H;键盘输入(类似getchar函数)
       int 21H;调用21号中断
       mov ax,4C00H;退出
       int 21H
rkmain endp ;程序结束

start:call rkmain ;从当前位置跳转到指定指令

code ends  ;代码段结束
end start
       jmp rk1 ;跳出 (没有停止条件)

如何实现if(ax>bx&&ax==5)的功能?:第一个满足了再判断下一个

如何实现for(int i=0;i<=100;i++)?:

mov cx,0 ;初始化cx
rk2:
cmp cx,100 ;比较cx 与 100
ja rk1 ;若cx>100 跳转

     mov dx,offset buffer
     mov ah,09H
     int 21H
     jmp rk2
rk1:
;这样就构成了个循环
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AKA山风点火

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值