• x86汇编debug记录


    本文基于x86汇编语言,MASM汇编器。

    1.MASM汇编器只支持汇编文件名<=8个字符的.asm文件

    2.数据段可以用xxx db 100 dup('y')预定义空间,预定义空间中存放的是100个'y'字符,特殊字符'?'表示空,'$'表示字符串结尾

    3.向内存写立即数时,需要指明mov的数据大小,要在mov和操作数之间加上byte ptr或word ptr,如:

    mov byte ptr [si+bx],'$'

    4.DOS的int 21h中断指令有很多用法,根据ah寄存器中的值执行,如:

    • ah=02h,输出dl寄存器中的单个字符
    • ah=09h,输出dx寄存器中的字符串
    • ah=07h,输入单个字符到al寄存器
    • ah=0ah,输入字符串,保存到dx寄存器所指位置
    • ……

    5.条件跳转都是短跳转(-128~127字节范围),可以通过巧妙安排各代码段的顺序避免报"jump out of range"的错,不行的话再借用jmp指令,或多级跳转

    6.在8086下,压栈和弹栈必须使用16位寄存器(如ax,bx),不能使用al,bl等

    7.div指令默认被除数与除数位数,若除数存放在8位bl寄存器,则被除数在16位ax寄存器;若除数在16位bx寄存器,则被除数在dx:ax两个16位寄存器中;除法后,余数存放在bh,商存放在bl

    8.有循环的代码中,注意循环前是否已经初始化相应的寄存器和变量

    9.代码段的assume是伪指令,一定要真正执行mov指令将对应段寄存器与定义的段位置相连

    10.特殊字符:0ah(' '),0dh(' '),1bh('x1b',esc键)

    11.注意重复定义的问题,变量不区分大小写,除大小写外相同的变量名视为相同

    12.以字母开头的16进制数之前要加0,否则会被当做未定义的符号处理

    用代码改变世界!就是这样,喵!
  • 相关阅读:
    通过anaconda进行python多版本控制
    搭建java环境
    windows安装 Microsoft Visual c++
    更改jupyter notebook的主题颜色(theme) 包括pycharm
    linux服务器安装anaconda,然后远程使用jupyter
    根据经纬度坐标计算距离-python
    Redis相关链接
    VBA笔记-参考教程
    用sklearn计算卡方检验P值
    linux创建新用户
  • 原文地址:https://www.cnblogs.com/Song-Meow/p/14642773.html
Copyright © 2020-2023  润新知