汇编语言子程序是如何定义的?

汇编语言子程序是如何定义的?,第1张

这样定义的:

子程序名 PROC     NEAR|FAR

             .

              .

            RET

子程序名 ENDP

子程序名相当于标号,表示本过程的符号地址。过程有NEAR和FAR两种类型,FAR型的过程可供段间调用,NEAR型过程仅供段内调用。

在一个过程中,至少要有一条返回指令RET,它可以书写在过程中的任何位置,但是过程执行的的最后一条指令一定是RET。

扩展资料:

注意事项

一、子程序调用指令

格式:CALL   [NEAR PTR]    子程序名

CALL指令的两个作用,1.将断点地址(CALL指令的下一条指令地址)压栈保存,2.转去子程序执行。

[NEAR PTR]可以省略。

二、返回指令

格式:RET     [N]

指令作用:实现子程序执行完后返回主程序的指令。从堆栈栈顶d出一个字数据(段内调用)送入IP作为返回地址。N是立即数,执行完RET之后,再将SP增加N,也叫“平栈”。

实验七 子程序设计(1)

(一)实验目的

1、掌握子程序的设计方法和调用方式

2、深刻认识堆栈在子程序设计中所起的作用

3、掌握子程序调试的技巧。

(二)实验设备

同实验二

(三)实验内容和要求

实验内容:

内存中有一字节型无符号数缓冲区Data,长度为100。将Data缓冲区显示到屏幕上,分别用二进制,十进制和十六进制。要求:

1.编写子程序将一个字节数用二进制进行显示,参数用内存数传递;

2.编写子程序将一个字节数用十进制进行显示,参数用寄存器数传递;

3.编写子程序将一个字节数用十六进制进行显示,参数用堆栈传递;

(四)预习要求

同实验二

(五)实验步骤

同实验二

(六)实验结果分析

1、理解3种参数传递方式各有什么特点

2、绘制一般子程序的结构。

(七)编程提示

(a) 二进制显示可采用移位并判断该位的方式进行。

(b) 十进制数采用除以10取商的方式。

(c) 十六进制数可利用二进制转换位十六进制的方法进行。

(d) 注意去掉最高位的“0”。

目前只做了1和2

DSEGsegment

data db 101,1,2,3,4,5,6,7,8,9,90 dup(5)

msg db ',','$'

msg1 db 'please choose operation','$'

msg2 db '0:bit-data 1:dec-data 2:hex-data','$'

addrtbl dw bdata,ddata,hdata

dseg ends

csegsegment

assume cs:cseg,ds:dseg

start:

mov ax,dseg

mov ds,ax

lea dx,msg1

mov ah,9

int 21h

mov dl,0ah

mov ah,2

int 21h

lea dx,msg2

mov ah,9

int 21h

mov ah,1

int 21h

sub al,30h

mov ah,0

shl ax,1

mov bx,ax

jmp addrtbl[bx]

mov si,0

ddata:

mov dl,' '

mov ah,2

int 21h

mov cx,100

nextt: mov bl,data[si]

mov bh,0

inc si

call progdec

loop nextt

jmp done

hdata:

bdata:

callprogbit

done:mov ah,4ch

int 21h

progdec proc

push ax

push dx

push bx

mov dl,100

mov ax,bx

div dl

cmp al,0

jne hundred

mov ax,bx

mov dl,10

div dl

cmp al,0

jne ten

mov dl,bl

add dl,30h

mov ah,2

int 21h

jmp exit

ten:

mov dl,al

add dl,30h

mov bx,ax

mov ah,2

int 21h

mov dl,bh

add dl,30h

mov ah,2

int 21h

jmp exit

hundred:

mov dl,al

mov bx,ax

add dl,30h

mov ah,2

int 21h

mov ah,bh

mov al,ah

mov ah,0

mov dl,10

div dl

mov dl,al

add dl,30h

mov bx,ax

mov ah,2

int 21h

mov dl,bh

add dl,30h

mov ah,2

int 21h

jmp exit

exit:

mov dl,' '

mov ah,2

int 21h

pop bx

pop dx

pop ax

ret

progdec endp

progbit proc

push ax

push bx

push cx

push dx

push si

mov si,0

ok:

mov bh,data[si]

mov cx,8

ok1:mov dl,30h

shl bh,1

jnc skip

inc dl

skip: mov ah,2

int 21h

loop ok1

next: lea dx,msg

mov ah,9

int 21h

inc si

cmp si,100

jb ok

pop si

pop dx

pop cx

pop bx

pop ax

ret

progbit endp

cseg ends

endstart


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

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

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

发表评论

登录后才能评论

评论列表(0条)

保存