八个比特

汇编语言程序设计

字数统计: 584阅读时长: 2 min
2019/04/07 Share

应付考试之用!


前戏:
参考书籍:CSAPP cp2,3
MIPS RUN


CISC RISC ARM 不考
数的表示
机器字长:一般指计算机进行一次整数运算所能处理的二进制数据的位数(也包括数据地址的长度)
机器字在内存中的组织:
地址按照字节来定位:
机器字中第一个字节的地址,相邻机器字的地址相差4或8
字节序:
Big Endian(大端模式):低位字节(LSB)占高地址
Little Endian:与LSB相反
1.png
基本数据类型:
2.png
如果无符号数与带符号数混合使用,则带符号数默认转换为无符号数

无符号数整除2的k次幂:采用逻辑右移
带符号数整除2的k次幂:采用算数右移
但当x<0时,会出现舍入错误
3.png
4.png

规格化浮点数:
5.png
栗子:
6.png

非规格化浮点数:
7.png
特殊值:
8.png
数轴上的分布:
9.png
向偶数舍入(Round-to-even):
10.png
11.png
C语言中的浮点数:
12.png


框图:
13.png
主存:
14.png
字单元地址用低位地址表示

80386的三种工作模式:
实地址模式、虚地址保护模式、虚拟8086模式
15.png
32位微处理器的寄存器:
16.png
保护模式下的80x86(段模式):
17.png
支持多任务处理功能
支持虚拟存储器特性
18.png

在x86-32体系结构的保护模式下,一个内存地址是由段基地址、偏移地址两个要素构成的。
每个段的描述由三个要素构成:段基地址(32位):段长度(20位,段长度单位为2^12):访问权限
出于系统兼容原因,段寄存器只有16位,故将高13位值作为索引来访问该表,从而获得64位的段描述符。
19.png

20.png


正片开始:
gcc -o2 -s xxx.c -m32 -fno-omit-frame-pointer
AT&T格式:
21.png

数据传送指令:
22.png
支持的组合:
23.png
不允许两个操作数都为内存地址

寻址:
24.png

25.png

寻址模式

1
2
3
4
5
6
void swap(int *xp, int *yp){
int t0=*xp;
int t1=*yp;
*xp=t1;
*yp=t0;
}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
swap:
pushl %ebp
movl %esp,%ebp
pushl %ebx

movl 12(%ebp),%ecx #ecx=yp
movl 8(%ebp),%edx #edx=xp
movl (%ecx),%eax #eax=*yp(t1)
movl (%edx),%ebx #eax=*xp(t0)
movl %eax,(%edx) #*xp=eax
movl %ebx,(%ecx) ##*yp=ebx

movl -4(%ebp),%ebx
movl %ebp,%esp
popl %ebp
ret
Register Variable
%ecx yp
%edx xp
%eax t1
%ebx t0

变址寻址:

地址计算指令

CATALOG