MCS-51应用系统中,执行子程序返回指令时,返回的断点是()。

MCS-51应用系统中,执行子程序返回指令时,返回的断点是()。,第1张

MCS-51应用系统中,执行子程序返回指令时,返回的断点是()。

A调用指令的首地址

B调用指令的末地址

C调用指令下一条指令的首地址

D返回指令的末地址

正确答案:调用指令下一条指令的首地址

跳转指令,顾名思义跳过一段程序到达指定的地方,即当跳转条件满足时将跳过一段程序到达指针指定点在执行程序,这中间的程序将不被执行,而调用子程序是当条件满足时将执行子程序,执行完之后再继续往下执行程序

MC/MCR指令为主控指令,当有一段连续的指令都有一个相同的条件时,若每条指令都写入这个条件势必麻烦,这是主控指令就发挥了作用,用这个条件触发主控指令,然后把这段程序放在主控指令中间,这样就相当于这段程序的每段程序都串上了这个条件

code  segment

      assume cs:code

      org 100h

start:jmp begin

str1a db 100

str1n db 

str1  db 100 dup()

char1 db 

begin:push cs

      pop ds

      push cs

      pop es

      mov ah,10

      lea dx,str1a

      int 21h

      

      call lfcr

      mov ah,1

      int 21h

      mov byte ptr char1,al

      

      mov cl,str1n

      mov ch,0

      lea di,str1

      cld

      repne scasb

      cmp cx,0

      je @0

      inc cx

@0:

      call lfcr

      

      mov al,str1n

      sub al,cl

      mov cl,al

      mov ch,0

      lea si,str1

      cld

@1:

      lodsb

      mov dl,al

      mov ah,2

      int 21h

      loop @1

      mov ah,4ch

      int 21h

lfcr  proc near

      push ax

      push dx

      mov ah,2

      mov dl,13

      int 21h

      mov dl,10

      int 21h

      pop dx

      pop ax

      ret

lfcr  endp

code  ends

      end start

两种方法:第一,通过传参数。参数在子程序里被修改的话,主程序的值也相应改掉(当然传值方法除外)。第二,子程序设置返回值,

private

sub()

as

string

{

sub="ABCD"

}

assume cs:codesg,ds:datasg,ss:stacksg

datasg segment

db 64 dup (0)

db 2

db 60

db 62 dup (0)

datasg ends

stacksg segment

dd 32 dup (0)

stacksg ends

codesg segment

start:

mov ax,stacksg

mov ss,ax

mov ax,datasg

mov ds,ax

mov sp,64

mov bp,sp

sub sp,2

mov word ptr [bp-2],60 ;要查的特定字节的值 因为栈只能压入word

push [bp-2] ;参数1

mov ax,ds ;要查的内存区域的段地址 你可以选定其他段地址

push ax ;参数2

mov ax,0 ;从偏移地址0开始找

push ax ;参数3

mov ax,128 ;到偏移地址64结束

push ax ;参数4

call check

pop ax ;debug 调用就可以查看ax的值 就可以看到是否是你想要的结果了

mov ax,4c00H

int 21H

;子程序名 check

;功能;根据给定地址 查找指定值的字节

;注: bp是子程序的bp 内存放值等于 主程序 (sp-4)

;参数1 ss:(bp+4) 查找结束的偏移地址(不包过此地址)

;参数2 ss:(bp+6) 给定地址偏移地址

;参数3 ss:(bp+8) 给定地址段地址

;参数4 ss:(bp+10) 要查的特定字节的值 注意 需要的是低16位

;返回 ss:(bp+4) 没找到 存放-1,找到存放 其偏移地址

check:

push bp

mov bp,sp

push ax

push bx

push cx

push ds

mov cx,ss:[bp+4]

mov bx,ss:[bp+6]

mov ax,ss:[bp+8]

mov ds,ax

sub cx,bx

zero:

mov ax,ss:[bp+10]

;判断 ax是否为0

call axiszero

inc bx

loop zero

mov ax,-1

go:mov ss:[bp+4],ax

pop ds

pop cx

pop bx

pop ax

pop bp

ret

axiszero:

push cx

sub al,ds:[bx]

mov cx,ax

jcxz ok

pop cx

ret

OK: pop cx

add sp,2

mov ax,bx ;得到地址

jmp short go

codesg ends

end start

;累死了 快给分吧

代码 最后写个:返回([数据]),即可。

这个子程序返回整数型数据,所以返回的数据要为整数,比如:返回(0)、返回(1)

如果不需要返回,把 子程序 上面那的 返回值类型 里的 整数 去了

以上就是关于MCS-51应用系统中,执行子程序返回指令时,返回的断点是()。全部的内容,包括:MCS-51应用系统中,执行子程序返回指令时,返回的断点是()。、plc在子程序用跳转指令后,是回到主程序还是回到子程序、汇编语言:子程序的调用与返回等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/zz/9603607.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存