汇编语言程序设计——分支结构例1

汇编语言程序设计——分支结构例1

设计目标

设计分支程序,实现下列公式计算。X、Y 为字型。假设 X 单元中保存三个数:9,-6,34,分别作判断和计算

设计思路

(1)在数据段中定义 2 个字型变量 X、Y,均为带符号数;

(2)在 X 单元中依次取出三个数分别作判断,根据 X 的大小作分支转移;

(3)采用寄存器相对寻址方式(MOV AX,X[SI])取出 X 的三个值;

(4)标号 OUT1 是各路分支的公共出口。

5-1.asm

;5-1.asm 用正常程序格式编写分支程序
data segment
	x dw 9,-6,34
	y dw 3 dup(?)
data ends

code segment
	assume cs:code,ds:data
start:
	mov ax,data
	mov ds,ax
	mov cx,3   ;循环3次
	mov si,0
let0:
	mov ax,x[si]  ;取出x
	cmp ax,0      ;x>=0?
	jge let1      ;是,转到let1
	mov bx,ax     ;否,计算x*x
	imul bx 
	jmp out1      ;跳到公共出口out1
let1:
	cmp ax,10     ;x>=10?
	jge let2      ;是,转到let2
	sal ax,1      ;否,计算2x+3  sal(shift Arithmetic left)算术左移
	add ax,3
	jmp out1      ;跳到公共出口out1
let2:
	mov bl,6      ;计算x/6
	idiv bl 	  ;商在al,余数在AH
out1:
	mov y[si],ax  ;保存Y
	add si,2
	dec cx	      ;cx-1
	cmp cx,0
	jnz let0	  ;CX≠0转移到let0
	
	mov ah,4ch    ;cx=0,程序结束
	int 21h
code ends
end start

masm 5-1;

link 5-1;

debug 5-1.exe

运行结果:

结束后:

  • 1)程序中采用 CMP 比较指令对分支的条件进行判断;
  • 2)根据判断的结果用条件转移指令 JGE、JNZ 等进行转移。条件满足转移到标号处执行程序,条件不满足则继续执行转移指令的下一条;
  • 3)无条件转移指令 JMP 直接跳到标号处执行;
  • 4)转移指令所跳转的方向,既可以是正方向跳转,也可以向反方向跳转。例如程序后部的指令 JNZ LET0,标号 LET0 在程序的前部,因此是往回跳转。可以看出,向反方向跳转构成了循环。

     

  • 条件转移指令的格式如下:

    条件转移指令操作码    OPR
    ; 这里的 OPR 代表标号
    

    条件转移指令的作用是当条件满足时,转移到由标号指出的那条指令去执行,条件不满足则继续执行本转移指令的下一条。

    例如 JZ LET1,表示结果为 0 就转移到 LET1 那条指令去执行。JZ 中的 Z 是零标志 ZF,当 ZF = 1 时,表示之前的运算结果为 0。

  • 更详细的转移指令参考下方链接

  • 条件转移指令参考链接

  • https://www.cnblogs.com/findumars/p/4121980.html

  •  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值