汇编学习(四)8086汇编拾遗 (3)

本文介绍了汇编语言中的基本指令及其用法,包括条件转移指令jcxz、偏移量转移、ret返回指令、call调用指令及mul乘法指令等。通过具体示例解释了这些指令如何在实际编程中应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

jcxz  指令:条件指令,所有的转移都是短转移,IP 的修改范围是-128~127 之间。

eg. 查找内存2000H段中的一个值为0的字节,然后将它的偏移地址存储在dx 中。
assume cs:code code segment start: mov ax,2000H mov ds,ax mov bx,0 S:mov ch,0 mov cl,ds:[bx] jcxz OK inc bx jmp S OK: mov dx,bx mov ax,4c00h int 21h code ends end start 

使用偏移量进行转移的意义: 方便程序段在内存中的浮动装配,也就是地址重定向的原理,链接过程的精髓,其实只是一个很简单的道理。 当编译器检测到位移超界后就会报错,这一点编译器可以做到。所以jmp 指令后的标号其实就是偏移量,带有符号位的偏移量。 关于一个绿色“hello world" 程序的小例子

assume cs:code ,ds:data

data segment

    db 'hello world'

data ends


code segment

    start:
            mov ax,data
            mov ds,ax
            mov ax,0b800H
            mov es,ax

            mov si ,0
            mov di ,10*160 + 80
            mov cx,11

          S1:mov al,ds:[si];
             mov ah,00000010B
             mov es:[di],ax
             inc si
             inc di
             inc di
             loop S1

            mov ax,4c00h
            int 21h
code ends

end start

这仅仅是一个小例子,我们接着学习。 ret  指令:从栈中弹出一个值,修改IP 内容 retf 指令: 从栈中先弹出一个值IP ;然后弹出一个值CS。 call 指令 : 将下一条指令压栈,转移 关于call 的几种用法: call 标号: 将下一条IP 压栈,然后转到标号处执行指令,call 也是一个转移偏移。 call far ptr 标号:实现的是段转移,实现过程,先压CS 再压IP进栈。跳转到标号去。 call reg    : 直接跳转寄存器的值。 call word ptr: 内存单元地址 ,相当于直接使用内存中的值修改IP。 call dword ptr 内存单元地址,相当于先压CS 再压IP 。 一个简单的函数小例子来自《汇编语言》

assume cs:code
code segment
    start: mov ax,1
           mov cx,3
           call s
           mov bx,ax
           mov ax,4c00h
           int 21h
         s:add ax, ax
           loop s
           ret 
code ends
end start

自此我们就可以尝试设计带有子程序的程序了。 mul 乘法指令: 参数注意:要么都是8位,要么都是16位,如果是8位,一个默认在AL,另一个在8位reg 和 内存中,如果是16位,一个默认在AX 中,另一个在16位reg 或内存单元中。 结果:如果是8位年默认在AX 中,如果是16位,结果高位默认在DX ,低位在AX。    

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值