• 【汇编语言王爽】学习笔记-p40-p54


    在这里插入图片描述

    通过点的形式 把立即数写到外面 对比c语言

    在这里插入图片描述

    结构体名字 数组名称 都相当于 基址bx;然后,用idata来定位结构体中的某一个数据项, 然后yao.team[1],里面的【1】也就相当于si

    在这里插入图片描述
    在这里插入图片描述

    div除法指令

    被除数:默认放在ax 或者dx ax
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    内存中实施除法

    在这里插入图片描述

    dup 设置重复的数据 db 3 dup(0)

    db dw dd

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    流程转移-导学

    在这里插入图片描述

    转移指令 如jmp—可以修改ip或者同时修改cs和ip

    分类 段内转移
    段间转移
    在这里插入图片描述

    无条件转移jmp 条件转移jcxz 循环指令loop 过程 中断

    offset 去的标号的偏移地址 offset 标号

    在这里插入图片描述

    在程序运行时,把某个指令复制到另一个地址—非常厉害的能力!

    添加两条指令,让改程序在运行中将s处的一条指令复制到s0处
    s: mov ax,bx
    mov si,offset s
    mov di,offset s0
    mov cx,cs:[si]
    mov cs:[di],cx
    s0: nop
    nop

    在这里插入图片描述

    无条件转移jmp

    在这里插入图片描述

    根据位移进行转移—jmp short s–跳转相对位置—可正可负 也不用自己算 用补码表示 八位位移由编译程序在编译时算出

    jmp short s

    立即数在机器指令中是有所体现的

    在这里插入图片描述

    近转移 jmp near ptr 标号

    在这里插入图片描述
    在这里插入图片描述

    远转移far ptr s

    在这里插入图片描述
    在这里插入图片描述

    转移地址在内存中的jmp word ptr ;jmp dword ptr

    在这里插入图片描述
    在这里插入图片描述

    jmp 小结

    在这里插入图片描述

    注意:不能直接jmp2000:0100这样的 debug行 别的不行

    在这里插入图片描述

    jcxz :j跳转 cx zero 当cx等于0 跳转–转移的是位移

    在这里插入图片描述

    loop指令: 位移:要跳转的指令地址减去loop指令自己的下一条指令的首地址即:例如06-0a=-4----编译成为补码=FC

    在这里插入图片描述

    段内转移 都是一些相对转移 相对位移 有不少好处方便了浮动装配

    在这里插入图片描述

    模块化程序设计-主程序调用 子程序call,返回ret-返回到调用call的下一条语句继续执行下去–实质 修改ip

    在这里插入图片描述

    call 标号 ----调用子程序-cpu进行了两步操作:1将当前的ip或者ip和cs压入栈中(call指令的下一条地址);2转移到标号处执行指令

    call
    push ip
    ip=ip+16位位移
    在这里插入图片描述

    段间转移 call far ptr 标号;

    1 cs ip 都压栈
    再跳转
    在这里插入图片描述

    在这里插入图片描述

    转移到寄存器内的地址call ax

    在这里插入图片描述

    call word ptr 内存单元地址

    在这里插入图片描述
    在这里插入图片描述

    返回指令ret–相当于pop ip用栈中的数据 修改ip内容,从而实现近转移和

    在这里插入图片描述

    retf—pop ip; pop cs 实现远转移返回

    在这里插入图片描述

    例子 call 和 ret

    在这里插入图片描述

    call和ret 解决问题 套路;第二个ret返回的时候返回到第一个call的当时的ip所指向的指令–即第一个call下面的指令

    在这里插入图片描述
    在这里插入图片描述

    调用子程序call 逐步返回

    在这里插入图片描述
    计算2的n次
    在这里插入图片描述
    在这里插入图片描述

    为call ret 指令 设置栈

    call以后压栈ip
    改ip
    在这里插入图片描述

    乘法 mul bl 对比 除法只用给出 除数

    在这里插入图片描述

    在这里插入图片描述

    汇编语言的模块化程序设计–参数和结果的传递问题

    在这里插入图片描述

    常用 寄存器存 参数和结果

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    内存单元批量传递数据

    在这里插入图片描述

    也很常用 栈 传递参数 压栈 弹栈

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

    寄存器冲突问题—编写子程序避免冲突寄存器—方案:在子程序的开始,将要用的寄存器的内容都保存起来,子程序返回前再恢复

    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    NPS:使用 Windows NPS Server 部署 802.1X 无线认证(3)
    组合式 API 的优势
    数商云:东方甄选品控翻车,如何通过供应链建设打造可持续商业模式
    【易忽视】方程两边同时平方会改变方程的解吗?【简洁证明】
    (十五)admin-boot项目之使用undertow来替代tomcat容器
    Docker部署Tomcat及Web应用
    wheel 包安装比较简单快捷,而 conda 安装相对复杂
    (八)Linux搭载4G模块——PDU短信格式的获取与解码
    C++(一)
    【神印王座】伊莱克斯现身,龙皓晨获得一传承,圣采儿却惨遭反噬
  • 原文地址:https://blog.csdn.net/weixin_43796670/article/details/126457576