call和ret指令

1、call和ret指令都是转移指令,他们都修改ip或同时修改cs和ip。

2、ret指令用栈中的数据,修改ip的内容,从而实现近转移。操作:1.(ip)=((ss*16)+(sp));2.(sp)=(sp)+2。retf指令用栈中的内容同时修改cs和ip

3、call指令经常跟ret指令配合使用,因此CPU执行call指令,进行两步操作:1.将当前的ip或cs和ip压入栈中;2.转移(jmp)。Call指令不能实现短转移,跟jmp操作相似。操作:1.push IP;2.jum near ptr 标号。范围-32768~32767,补码表示。(转移位移

4、转移的目的地址在指令中的call指令:段间转移指令call far ptr 标号。操作:1.push cs,push ip,jmp far ptr 标号。

检测点10.3:先cs入栈1000,此时ip=8,8+8=16,也就是10h。

5、转移地址在寄存器中的call指令:call 16位寄存器,操作:push ip,jmp s。2.call word ptr 内存单元地址,操作:push ip,jmp word ptr 内存单元地址。3.call dword ptr 内存地址,操作:push ip,jmp dword ptr 内存单元地址。

6、call和ret配合使用:利用call和ret来实现子程序机制,call指令转去执行子程序之前,call指令后面的指令的地址将存储在栈中,在子程序后面使用ret指令,用栈中的数据恢复设置的ip的值,从而转到call指令后面的代码处继续执行。

7、mul指令,乘法指令。相乘的两个数:要么都是8位的,要么都是16位的。乘数默认8位在al中,16位在ax中。结果8位:AX中,16位:高位dx中,低位ax中。格式:mul reg;mul 内存单元。

8、模块化程序设计:call和ret指令配合支持了汇编语言编程中的模块化设计(也就是面对过程)。①参数和结果的传递问题:批量数据传递,将批量数据放到内存中,然后将它们所在内存空间的首地址放在寄存器中,传递给需要的子程序,对于具有批量数据的返回结果,也可用同样的方法。除此之外,通用的方法就是栈

9、注意养成良好的风格:程序美观、注释。

View Code
复制代码
 1 ;将以0结尾的字符串转化为大写(这个程序有问题,cx的处理)
 2 assume cs:code,ds:data
 3 
 4 data segment
 5   db 'word',0 
 6   db 'unix',0
 7   db 'wind',0
 8   db 'good',0
 9 data ends
10 
11 code segment
12 
13 start:  mov ax,data
14       mov ds,ax
15       mov bx,0     
16       
17       mov cx,4
18     s:mov si,bx
19       call capital
20       
21       add bx,5
22       loop s
23       
24       mov ax,4c00h
25       int 21h
26       
27 capital:mov cl,[si]
28       mov ch,0
29       jcxz ok        ;判断cx是否为0
30       and byte ptr [si],11011111b
31       inc si
32       jmp short capital
33      ok:ret
34       
35 code ends
36 edn start
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值