汇编基础

汇编基础

结构和宏

结构

结构(structure)是一组逻辑相关变量的模板或模式。结构中的变量被称为字段(fields),程序语句可以把结构作为整体进行访问,也可以访问其中的单个字段。
使用结构包含三个连续的步骤:
1)定义结构
2)声明结构类型的一个或多个变量,称为结构变量(structure variables)
3)编写运行时指令访问结构字段

对齐结构字段

为了获得最好的内存I/O性能,结构成员应按其数据类型进行地址对齐。否则,CPU将会花更多时间访问成员。
使用ALIGN伪指令会试其后的字段或者变量按地址对齐

Read more
汇编实验

汇编实验

对应基础第6篇的部分

新建多模块程序

大型源文件难于管理且汇编速度慢,可以把单个文件拆分为多个子文件,但是对其中任意子文件的修改都需要对整个文件进行整体汇编。更好的方法是把一个程序按照 模块 (module)分割。每个模块可以单独汇编,因此,对一个模块源代码的修改就只需要重新汇编这个模块。链接器将所有汇编好的模块(obj文件)组合为一个可执行文件的速度相当快,链接大量目标模块比汇编同样数量的源代码花费的时间要少的多

Read more
汇编基础

汇编基础

高级过程

本章将介绍子程序调用的底层结构,重点集中于运行时的堆栈操作。本讲内容对C和C++程序员也是很有价值的,因为在调试程序运行于操作系统或设备驱动程序层的底层子程序时,他们也必须检查运行时的堆栈内容

Read more
汇编实验

汇编实验

对应第五章内容及练习

最大公约数

求两个数的最大公约数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
.data
val1 DWORD 120
val2 DWORD 36
.code
mov eax, val1
mov ebx, val2
L1:
mov edx, 0
div ebx ;余数在EDX,商在EAX
cmp edx, 0
je L2
mov eax, ebx ;除数做被除数
mov ebx, edx ;余数做除数
jmp L1
L2:
mov esi, ebx ;ESI返回最大公约数

需要注意一个问题就是EDX的值(被除数高位),每次计算时需要将其置零,否则容易导致结果溢出(存储商或者余数的寄存器无法放得下商或者余数)

Read more
汇编基础

汇编基础

整数运算

本章将学习汇编语言的最大优势之一:基本二进制位移和循环位移技术。实际上,位操作是计算机图形学,数据加密和硬件控制的固有部分。

Read more