汇编学习2--语言基础

来源:互联网 发布:vb效果英文 编辑:程序博客网 时间:2024/06/16 01:01

1. 元素

  1. 整数常量
  2. 实数常量:至少应该有小数点,没小数点则是整数常量
    编码遵循IEEE (+1.0 = 0(符号位)011 1111 1(指数位:等于正规化后实际指数+127)000 0000 0000 0000 0000 0000(小数位) 其中正规化后,整数位只有一个1,故省略不记
  3. 字符常量:’a’
  4. 字符串常量:’sc’
  5. 保留字
  6. 标识符:不能与保留字相同,不以数字开头
  7. 伪指令:各个汇编器不同,MASM大小写不敏感,
    .data
    .code
    .stack 100h
  8. 指令:
  9. 操作数:寄存器,内存操作数,常量表达式,I/O端口
  10. nop:对齐指令,占用一字节存储,什么也不做

2. 程序

  1. 分析:
    这里写图片描述

    .386:最低CPU Intel 386
    .MODEL:指示汇编器为保护模式生成代码,STDCALL 允许调用MS-windows 函数
    ExitProcess PROTO, dwExitCode: DWORD
    DumpRegs PROTO:
    PROTO声明该程序使用的过程原型

MOV指令:
两个操作数必须尺寸一致
两个操作数不能同为内存操作数
目的操作数不能是CS,EIP,IP
立即数不能直接送至段寄存器

间接寻址

保护模式下,间接操作数可以是任何用方括号括起来的任意32位寄存器
实模式下,只能用SI,DI,BX,BP作为间接操作数
BP常用于保留作寻址堆栈数据
保护模式下,数组下标越界会产生通用保护故障。实模式下则不会
inc[esi] 无效,因为编译器不知道ESI指向一个字,一个字节,一个双字,或其他什么操作数
使用 inc BYTE PTR [esi] 指明操作数尺寸大小
JMP 无条件跳转,且只能跳转至当前过程内标号
LOOP:先将ecx-1然后把ecx 与 0 比较,大于则跳转
loop指令目的地址与当前地址只能相距在(-128~+127)范围内
LOOPD:无论实模式都是ECX做循环计数器
LOOP实模式CX做计数器

过程

链接库是一个文件,包含了已经编译为机器码的过程
库可以由一个或多个原代码文件构成,这些文件被汇编成目标文件,然后这些目标文件被插入到一个特定格式的文件–库中

Lib是编译时静态链接库,dll是运行时动态链接库

在动态库的情况下,有两个文件,一个是引入库(.LIB)文件,一个是DLL文件,引入库文件包含被DLL导出的函数的名称和位置,DLL包含实际的函数和数据,应用程序使用LIB文件链接到所需要使用的DLL文件,库中的函数和数据并不复制到可执行文件中,因此在应用程序的可执行文件中,存放的不是被调用的函数代码,而是DLL中所要调用的函数的内存地址

0 0
原创粉丝点击