汇编语言 编写一个分支程序,当满足不同条件时完成不同的功能

汇编语言 编写一个分支程序,当满足不同条件时完成不同的功能,第1张

所谓分支程序,其实就是将函数的厅启地址放在一磨伏埋组数据中,根据不同的条件跳转到这些地址入口执行程序。方法有几种,比如,以下就是利用跳转指令将地址组合在一起实现的方法之一。

MEMORYM:

LCALL CHGRAM11内存选择,确定内存区域,这里省略

MOV DPTR,#ST0函数入口地址组合首地址

CLR C

DEC A调用参数,以下计算入口地址

MOV R7,A

RLC A

ADD A,R7

JMP @A+DPTR跳转到入瞎蚂口地址

ST0:

LJMP FUNC1 以下为13个函数入口地址,完成不同的功能

LJMP FUNC2

LJMP FUNC3

LJMP FUNC4

LJMP FUNC5

LJMP FUNC6

LJMP FUNC7

LJMP FUNC8

LJMP FUNC9

LJMP FUNC10

LJMP FUNC11

LJMP FUNC12

LJMP FUNC13

datasegment

x db 5 x的值可以在运码这里更改,或者在debug中用e命令修改

y dw ?

dataends

codesegment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

xor ah,ah ah清零,目的是为了将字节扩展为字

mov al,x 取得数据x

cmp al,40 和40比较

jb next1 小于40转next1

jmp stop 大如野于等于40,就是x本身,直接转stop保存结果

next1: cmp al,20 小于40,渣悄喊则和20比较

jbe next2 小于等于20则转next2

add ax,ax 小于40并且大于20,x乘以2,相当于x+x,加法的执行效率比乘法高

jmp stop 转stop存结果

next2: xor al,al 小于等于20,将al清零

stop: mov y,ax 保存结果

mov ax,4c00h

int 21h

codeends

end start

data segment

score dw 10 dup (?)

s5 db ?

s6 db ?

s7 db ?

s8 db ?

s9 db ?

s10 db ?

data ends

code segment

assume cs:code,ds:data

start:

lea si,score

mov cx,10

mov dl,10

next:

mov ax,[si]

div dl

mov ah,0

mov bx,ax

cmp bx,5

jnb next1

mov bx,5

next1:

inc s5[bx-5]

add si,2

loop next

mov ah,4ch

int 21h

code ends

end start


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12450244.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存