汇编语言call指令 怎么

汇编语言 call怎么用

汇编语言CALL是调用子程序指令,用法如下:
CALL
子程序名
参数的传递是通过调用者和被调用者的相互约定实现的。
在51汇编语言中CALL只能实现2K范围内的调用,大于这个限制就需要用到LCALL了。
比如:
ORG
0000H
LJMP
MAIN:
MAIN:
MOV
SP,#7FH
CALL
INIT
LOOP:
JNB
RI,$
CLR
RI
MOV
A,SBUF
MOV
SBUF,A
JB
TI,$
CLR
TI
SJMP
LOOP
INIT:
MOV
TMOD,#20H
;定时器1做波特率发生器
MOV
TH1,#0FDH
;波特率9600bps
MOV
TL1,#0FDH
MOV
SCON,#50H
;串口工作方式1,运行接受
SETB
TR1
RET
END

汇编语言中的call是什么意思

汇编语言中CALL指令调用一个子程序,CPU执行call指令,进行两步操作:
(1)将当前的 IP 或 CS和IP 压入栈中;
(2)转移到紧跟的标号行地址执行程序。
比如:
CALL InputCheck
……..
InputCheck:
……..
其处理步骤如下:
(1) (sp) = (sp) – 2
((ss) ×16+(sp)) = (CS)
(sp) = (sp) – 2
((ss) ×16+(sp)) = (IP)
(2) (CS) = InputCheck所在的段地址
(IP) = InputCheck所在的偏移地址

汇编语言中的STR是什么意思.还有CALL指令怎么用

分类: 电脑/网络 》》 程序设计 》》 其他编程语言
解析:

据我所知,汇编里面没有str这个指令,可能是人家定义的字符串或者宏你错误的理解成指令了,而call是个调用指令,即被call的是一个子程序,一旦用了,这个子程序就会被抓到当前位置执行一次。

汇编语言中的call是什么意思

意思:指REMOTE CALL、游戏CALL,指一种注入外部EXE程序从外部调用函数的技术。找CALL一般使用OD等工具,而CALL的使用一般需要编写复杂的汇编代码。

call指令的用法

1、call+标号

这个指令是先将call+标号的下一条语句的IP放入栈中,然后使当前的IP+16位位移。

jmp有个指令格式是:jmp near ptr标号,这里的call唯一这种jmp多的一步就是多了一次入栈操作;

call far ptr+标号

这个指令是先将call指令的下一个指令的代码段地址入栈,再把call下一条指令的偏移地址入栈,然后使其跳到标号所在处。

jmp指令的:jmp far ptr标号,这种jmp的使用是在段间转移的,这种call和jmp的区别就是多了两次入栈的操作;

3、call+16位寄存器

这个指令先将call的下一条指令的IP入栈,然后再以ax为IP的代码处

jmp指令:jmp+16位寄存器,这里的call唯一比jmp多的一步就是多了一步入栈操作;

扩展资料:

VB关键字(调用)

用于将程序的执行交给其他的代码段,通常是一个子例程,同时保存必要的信息,从而使被调用段执行完毕后返回到调用点继续执行。

描述

将控制权传递给Sub过程或Function过程。

语法

Call语句语法有以下部分:

部分描述

Call可选关键字。如果指定此关键字,则必须用括号把argumentlist括起来。例如:

Call MyProc(0)

name必选。要调用的过程名。

argumentlist可选。传递给过程的变量、数组或表达式列表,用逗号分隔每一项。

说明

在调用过程时,不必使用Call关键字。然而,如果使用Call关键字调用要求参数的过程,则必须用括号将argumentlist括起来。如果省略Call关键字,那么必须也同时省略argumentlist参数两边的括号。使用Call语法调用内部函数或使用用户自定义函数,函数返回值都会被放弃。

参考资料:

百度百科——call

汇编语言-其他转移指令CALL

jcxz

指令格式: jcxz标号

功能: 如果cx=0 则转移标出处执行

       当cx!=0 什么也不做(程序向下执行)

根据位移进行相对转移的意义

    jmp short标号

    jmp near ptr标号

    jcxz标号

    loop标号

在它们对应的机器码中不包含转移的目的地址,而包含的是到目的地址的位移。

1、如果loop s的机器码中包含的是s的地址,则就对程序段在内存中的偏移地址有了严格的限制,易引发错误。

2、当机器码中包含的是转移的位移,无论s处的指令地址是多少,loop指令转移的相应位移是不变的。

mov ax,0

call s

mov ax,4c00h

int 21h

s:add ax,1

ret
调用子程序call指令

返回 ret指令

实质: 流程转移指令,它们都修改IP,或同时修改CS和IP

格式call 标号

cpu执行call指令,进行两步操作,call指令调用之后话牵扯到一个返回(ret)的问题,执行完标号处指令,怎么返回到当前调用的call 标号 处去执行下一条指令呢?

(1)将当前的ip或cs和ip压入栈中

(2)转移到标出执行指令
    16位位移= “标号”处的地址-call指令后的第一个字节的地址

    16位位移的范围为 用补码表示

    16位移由编译程序在编译时算法。
call word ptr内存单元地址word = 字(16位)

相当于push ip

       jmp word ptr内存单元地址

mov sp,10h

mov ax,0123h

mov ds:,ax

call word ptr ds:

执行后(ip)=0123H (sp)=0EH
call dword ptr内存单元地址dword双字(32位)
返回指令ret和retf
call和ret和retf配合使用 

例:计算2的n次方,计算前n的值由cx提供。

assume cs:code

codeseg ment 

start:

    mo ax,2

    mov cx,3

    call s

    mov bx,ax

    mov ax,4c00h

    int 21h

s:add ax,ax

    loop s

    ret

这个例子虽然可以完成功能,但是没有栈这样会产生安全问题,而且ret是用于栈中的

例: 为call和ret指令设置栈

assume cs:code,ss:stack

stack segment

    db 8 dup(0)

    db 8 dup(0)

stack ends

code segment

start:

    mov ax,stack

    mov ss,ax

    mov sp,16

    mov ax,1000

    call s

    mov ax,4c00h

    int 21h

s:add ax,ax

    ret

code ends

end start

微机原理与汇编语言中的指令JMP、CALL的区别

汇编语言中,JMP是无条件转移指令,CALL是子程序调用指令。
指令JMP、CALL的区别在于,JMP指令控制程序直接跳转到目标地址执行程序,程序总是顺序执行,指令本身无堆栈操作过程。CALL指令跳转到指定目标地址执行子程序,执行完子程序后,会返回CALL指令的下一条指令处执行程序,执行CALL指令有堆栈操作过程。
举例如下:
JMP
NEAR
NEXT;跳转到NEXT执行程序
……
NEXT:
;目标地址,程序将从这里向下执行
……
CALL
NEXT;调用从地址NEXT开始的子程序
NOP
;子程序结束后返回到这里,然后向下继续执行程序
……
NEXT:
;子程序目标地址,程序将从这里向下执行
RET
;子程序返回指令,子程序执行到此结束,返回CALL指令的下一条指令处

汇编call 指令

call
word
ptr
?下的内容给ip,然后继续执行.
在压栈时是sp=sp-2,ss:=压栈的ip值.
call
dword
ptr
?下的内容给ip,
?的内容给cs,然后继续执行.
这里是sp=sp-2;ss:=压栈的ip.
希望对你有用.

汇编语言中LCALL和JMP有什么区别啊

一、程序执行顺序不同

1、LCALL:LCALL是调用子程序,当子程序执行完后就返回到LCALL指令下一条指令继续执行程序

2、JMP:JMP是无条件转移指令,转移到某执行程序后就不再返到回原处,是一去不回返的。

二、程序处理方式不同

1、LCALL:指令在进行流程跳转前会保存返回地址,以便在跳转目标代码中可以使用ret指令返回到call指令的下一条指令处继续执行。执行段内跳转时,只保存EIP;如果是段间跳转,还保存CS。

2、JMP:进行执行流程的跳转,不会保存返回地址。

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

这样定义的:

子程序名 PROC     NEAR|FAR

               .

                .

              RET

子程序名 ENDP

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

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

扩展资料:

注意事项

一、子程序调用指令

格式:CALL       子程序名

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

可以省略。

二、返回指令

格式:RET     

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

汇编语言中CALL可以用什么代替

  汇编语言中CALL可以使用invoke伪指令代替;
  INVOKE 的语法如下: INVOKE expression expression 既可以是一个函数名也可以是一个函数指针。参数由逗号隔开。
  INVOKE是编译器支持的伪指令,会检查参数。
  CALL会直接去栈里取参, INVOKE最后也会变成 PUSH PUSH … CALL 的形式。