java8086分支代码_8086汇编语言程序设计——分支

汇编语言程序和高级语言程序一样,有顺序、分支、循环、子程序四种结构形式。

计算机程序在执行过程中,可以改变程序的执行顺序,根据一定的条件进行转移,使程序完成更复杂的功能。汇编语言提供了无条件转移指令和条件转移指令。

一个分支程序的例子

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

4051e471182f4f433e26fbb026a4a540.png

设计思路:

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

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

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

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

程序框图:

dcc5895b74c5e5cbc3f251a816a19444.png

代码:

;a.asm 用正常程序格式编写分支程序

data segment

x dw9,-6,34y dw3dup(?) ;定义一个变量,占3的字,每个字的内容未知

data ends

code segment

assumecs:code,ds:datastart:

movax,datamovds,axmov cx,3;循环三次mov si,0

let0:

movax,x[si] ;取出Xcmp ax,0 ;X ≥0?jgelet1 ;是,转到let1movbx,ax ;否,计算X*Ximulbxjmpout1 ;跳到公共出口out1let1:

cmp ax,10 ;X ≥10?jgelet2 ;是,转到let2sal ax,1 ;否,计算2X+3

add ax,3

jmpout1 ;跳到公共出口out1let2:

mov bl,6 ;计算X/6

idivbl ;商在al,余数在ahout1:

movy[si],ax ;保存Yadd si,2

dec cx ;CX-1

cmp cx,0

jnzlet0 ;CX≠0转移到let0mov ah,4ch ;CX=0,程序结束int21h

code ends

end start

条件转移非常多,但基本上看见名字就能明白,可自行百度查阅。

示例2

示例 设计分支程序。计算 Y=5X-18,如果结果为负,求绝对值。并显示十进制结果。

设计思路:

(1) 用数据段保存X、Y。为简便,X定义为字节,Y定义为字;

(2) 用符号位SF判断运算结果的正负,为负数则求补(绝对值),如果是正数,直接保存结果;

(3) 采用将AX中的结果除以10、取得余数的方法获得结果的十进制数;

(4) 将余数变为ASCII码,用DOS中断调用的2号功能显示出来;

(5) 用9号功能显示提示信息。

程序框图:

c1bb4b7e7d1f67e461534f7d5fb25f22.png

代码:

;b.asm 计算Y=5X-18,用正常程序格式

data segment

x db -6 ;Define Byte,定义一个字节,y dw ? ;字,?表示内容不确定

cc db 0ah,0dh,'Y=$'data ends

code segment

assumecs:code,ds:datastart:

movax,datamovds,axmov al,5;5Ximulxsub ax,18 ;-18

jnslet0 ;结果不为负则转移negax ;结果为负,求绝对值let0:

movy,ax ;保存结果

;将ax中的二进制数变为十进制数,并显示mov cx,0

mov bx,10

let1:

mov dx,0

inccx ;统计余数个数idiv bx ;AX/10,商在AX,余数在DXpushdx ;保存余数cmp ax,0;商为0,则退出循环jnzlet1movdx,offset cc ;9号功能显示提示mov ah,9

int21hlet2:;循环执行cx次,显示十进制结果popax ;将余数弹入axaddax,0030h ;调整为ASCII码movdl,al ;2号功能,显示一个字符mov ah,2

int21hdeccxcmp cx,0

jnzlet2movah,4chint21h

code ends

end start

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值