
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在子程序用跳转指令后,是回到主程序还是回到子程序、汇编语言:子程序的调用与返回等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)