《i486处理机程序员参考手册 下》PDF下载

  • 购买积分:10 如何计算积分?
  • 作  者:鹏飞,晓晖译
  • 出 版 社:北京希望电脑技术公司
  • 出版年份:1991
  • ISBN:
  • 页数:233 页
图书介绍:

第一章 i486TM处理器简介 2

1.1 本手册的编排 2

1.1.1 第一部分——应用程序设计 2

1.1.2 第二部分——系统程序设计 2

目录 2

1.1.3 第三部分——数值处理 3

1.1.4 第四部分——兼容性 3

1.1.5 第五部分——指令集 4

1.1.6 附录部分 4

1.2 参考文献 4

1.3 有关约定 5

1.3.1 位和字节顺序 5

1.3.2 未定义的位和软件兼容性 5

1.3.5 分段寻址 6

1.3.6 异常 6

1.3.4 十六进制数 6

1.3.3 指令的操作数 6

第一部分 应用程序设计 8

第二章 基本程序设计模式 8

2.1 内存组织 8

2.1.1 未分段或“平板”模式 9

2.1.2 分段模式 9

2.2 数据类型 9

2.3 寄存器 11

2.3.1 通用寄存器 13

2.3.2 段寄存器 15

2.3.3 栈的实现 16

2.4 指令格式 19

2.5 操作数的选择 20

2.5.1 立即操作数 21

2.5.2 寄存器操作数 22

2.5.3 内存操作数 23

2.6 中断和异常 24

3.1.1 通用数据传送指令 28

第三章 应用程序设计 28

3.1 数据传送指令 28

3.1.2 栈操作指令 29

3.1.3 类型转换指令 29

3.2 二进制算术指令 31

3.2.1 加法和减法指令 32

3.2.2 比较和符号转换指令 33

3.2.3 乘法指令 33

3.2.4 除法指令 34

3.3 十进制算术指令 34

3.3.1 压缩BCD的调节指令 34

3.3.2 非压缩BCD调节指令 35

3.4 逻辑指令 35

3.4.1 布尔运算指令 35

3.4.2 位测试和修改指令 36

3.4.3 位扫描指令 36

3.4.4 移位和循环移位指令 36

3.4.5 字节的条件设置指令 44

3.4.6 测试指令………………………………………………………………………(44 )3.5 转移控制指令 45

3.5.1 无条件转移指令 45

3.5.2 条件转移指令 46

3.5.3 软件中断 47

3.6 串运算 48

3.6.1 重复前缀 49

3.6.2 变址和方向标志控制 49

3.6.3 串指令 49

3.7 用于块结构语言的指令 50

3.8 标志控制指令 54

3.8.1 进位和方向标志控制指令 55

3.8.2 标志转移指令 55

3.9 数值指令 56

3.10 段寄存器指令 56

3.10.1 段寄存器转移指令 57

3.11.1 地址计算指令 58

3.11 其它指令 58

3.10.2 远转移控制指令 58

3.10.3 数据指针指令 58

3.11.2 空操作指令 59

3.11.3 变换指令 59

3.11.4 字节交换指令 59

3.11.5 交换及相加指令 60

3.11.6 比较并交换指令 60

第二部分 系统程序设计 64

第四章 系统体系结构 64

4.1 系统寄存器 64

4.1.1 系统标志 64

4.1.2 内存管理寄存器 66

4.1.3 控制寄存器 66

4.1.4 调试寄存器 68

4.2 系统指令 69

5.1.1 平板模式 73

第五章 内存管理 73

5.1 选择分段模式 73

5.1.2 受保护的平板模式 74

5.1.3 多段模式 74

5.2 段的转换 75

5.2.1 段寄存器 75

5.2.2 段选择子 76

5.2.3 段描述子 78

5.2.4 段描述子表 82

5.2.5 描述子表基址寄存器 82

5.3 页式转换 83

5.3.1 PG位开放页机构 84

5.3.2 线性地址 85

5.3.3 页表 85

5.3.4 页表项 85

5.4.1 平板模式 87

5.4.2 跨越多页的段 87

5.4 组合的段页式转换 87

5.3.5 转换旁视缓冲器 87

5.4.3 跨越多段的页 88

5.4.4 对齐的段页边界 88

5.4.5 每段一个页表 88

第六章 保护 90

6.1 段一级的保护 90

6.2 段描述子和保护 90

6.2.1 类型检查 91

6.2.2 限长检查 92

6.2.3 特权级 93

6.3 限制数据的存取 94

6.3.1 存取代码段中的数据 95

6.4 限制控制的转移 96

6.5 门描述子 97

6.5.1 任务切换 99

6.5.2 过程的返回 101

6.6.1 特权指令 103

6.6 操作系统保留的指令 103

6.6.2 敏感指令 104

6.7 用于检查的指令 104

6.7.1 描述子的合法性 105

6.7.2 指针完整性和RPL 105

6.8 页面保护 106

6.8.1 页表项包括保护参数 106

6.8.2 两级页表的组合保护 107

6.9 段和页的组合保护 108

6.8.3 页保护的超越情况 108

第七章 多任务 109

7.1 任务状态段 109

7.2 TSS描述子 110

7.3 任务寄存器 110

7.4 任务门描述子 111

7.5 任务切换 112

7.6 任务连接 116

7.6.1 忙位阻止循环 117

7.7 任务地址空间 118

7.7.1 任务线性物理空间 118

7.6.2 修改任务的连接状态 118

7.7.2 任务逻辑地址空间 119

第八章 输入输出 120

8.1 I/O寻址 120

8.1.1 I/O地址空间 120

8.1.2 内存映象I/O 121

8.2 I/O指令 122

8.2.1 寄存器I/O指令 122

8.3.1 I/O特权级 123

8.2.2 块I/O指令 123

8.3 保护与I/O 123

8.3.2 I/O权限位映象 124

第九章 异常与中断 126

9.1 异常和中断向量 126

9.2 指令再启动 127

9.3.4 对SS进行MOV、POP可屏蔽某些异常和中断 128

9.3.3 RF屏蔽调试故障 128

9.3.1 NMI屏蔽多重不可屏蔽中断 128

9.3.2 IF屏蔽INTR中断 128

9.3 开放与关闭中断 128

9.4 异常和中断的优先级 129

9.5 中断描述子表 129

9.6 IDT描述子 130

9.7 中断门和中断处理 131

9.7.1 中断过程 131

9.7.2 中断任务 133

9.8 错误代码 134

9.9 异常条件 135

9.9.1 中新0——除法错 135

9.9.2 调试异常 136

9.9.3 中断3——断点 136

9.9.4 中断4——溢出 136

9.9.6 中断6——非法操作码 137

9.9.7 中断7——设备不可用 137

9.9.5 中断5——界限检查 137

9.9.8 中断8——双故障 138

9.9.9 中断9——Intel保留 139

9.9.10 中断10——非法TSS 139

9.9.11 中断11——段不存在 140

9.9.12 中断12——栈异常 141

9.9.13 中断13——通用保护 141

9.9.14 中断14——页故障 142

9.9.15 中断16——浮点错误 143

9.9.16 中断17——对齐检查 143

9.10 异常小结 144

9.11 错误代码小结 145

第十章 初始化 147

10.1 初始化后处理器的状态 147

10.2 实方式下软件初始化 148

10.2.4 开放高速缓存 149

10.2.3 ?条指令 149

10.2.1 系统表 149

10.2.2 NMI中断 149

10.3 切换至保护方式 150

10.3.1 系统表 150

10.3.2 NMI中断 150

10.3.3 PE位 150

10.4 保护方式下的软件初始化 150

10.4.1 分段 150

10.5 TLB测试 151

10.5.1 TLB结构 151

10.4.3 任务 151

10.4.2 分页 151

10.5.2 测试寄存器 152

10.5.3 测试操作 153

10.6 高速缓存(Chache)测试 154

10.6.1 Cache结构 154

10.6.2 测试寄存器 155

10.7 初始化举例 157

11.2 调试寄存器 163

11.1 调试支持 163

第十一章 调试 163

11.2.1 调试地址寄存器(DR0~DR3) 164

11.2.2 调试控制寄存器(DR7) 164

11.2.3 调试状态寄存器(DR6) 165

11.2.4 断点域识别 165

11.3 调试异常 165

11.3 1 中断1——调试异常 166

11.3.2 中断3——断点指令 168

12.1 高速缓存介绍 169

第十二章 高速缓存Cache 169

12.2 内部Cache操作 170

12.2.1 Cache禁止位 170

12.2.2 Cahce管理指令 170

12.2.3 自身修改代码 170

12.3 页级Cache管理 171

12.3.1 Cache管理位 171

13.1.1 LOCK前缀和LOCK#信号 172

13.1 锁定和伪锁定的总线周期 172

第十三章 多机处理 172

13.1.2 自动锁定 173

13.1.3 伪锁…………………………………………………………………………(173 )第三部分 数值处理第十四章 数值应用程序介绍14.1 历史 175

14.2 性能 175

14.3 应用简便性 176

14.4 应用程序 177

14.5 程序设计接口 178

15.1.1 FPU寄存器栈 181

15.1 数值寄存器 181

第十五章 浮点部件的结构 181

15.1.2 FPU状态字 182

15.1.3 控制字 184

15.1.4 FPU标记字 185

15.1.5 数值指令和数据指针 186

15.2 计算基础 187

15.2.1 数字系统 187

15.2.2 数据类型和格式 188

15.2.3 舍入控制 192

15.2.4 精度控制 193

第十六章 特殊的计算情况 194

16.1 特殊的数值 194

16.1.1 浮点实数 194

16.1.2 零 198

16.1.3 无穷数 200

16.1. 4 NaN(“不是数”) 202

16.1.7 未支持的格式 204

16.1.6 数据类型的编码形式 204

16.1.5 不定数 204

16.2 数值异常 208

16.2.1 处理数值异常 209

16.2.2 非法运算 210

16.2.3 除零 211

16.2.4 非规格化操作数 212

16.2.5 算术上溢和下溢 212

16.2.6 非精确(精度) 214

16.2.8 标准上溢/下溢异常处理程序 215

16.2.7 异常的优先级 215

第十七章 浮点指令集 216

17.1 目的操作数和源操作数 216

17.2 数据传送指令 216

17.3 基本算术指令 217

17.4 比较指令 218

17.5 超越数指令 219

17.6 常数指令 220

17.7 控制指令 220

第十八章 数值应用程序 222

18.1 编程工具 222

18.1.1 高级语言 222

18.1.2 C程序 222

18.1.3 PL/M—386/486 222

18.1.4 ASM386/486 224

18.1.5 示范程序 227

18.2 并发处理 231

18.2.1 并发的管理 232

第十九章 系统一级的考虑 234

19.1 体系结构 234

19.1.1 独立的寻址方式 234

19.2 处理器的初始化和控制 234

19.2.1 系统的初始化 234

19.2.2 设置数值环境 234

19.2.3 初始化FPU 235

19.2.4 仿真 235

19.2.5 处理数值异常 236

19.2.6 响应多重异常 236

19.2.7 异常恢复示例 236

第二十章 数值示范程序 238

20.1 条件分支程序 238

20.2 异常处理程序 238

20.3 浮点数到ASCII码的转换程序 242

20.3.1 功能划分 242

20.3.2 对异常的考虑 243

20.3.3 特殊指令 257

20.3.4 操作的描述 257

20.3.5 数值的调节 257

20.3.6 输出格式 258

20.4 三角运算程序 258

第四部分 兼容性 270

第二十一章 运行80286和386DX或SX CPU程序 270

21.1 运行80286CPU任务的两种方式 270

21.2 与80286CPU的差别 270

21.2.1 24位物理地址空间的环绕 270

21.2.2 段描述子的保留字 271

21.2.3 新段描述子类型代码 271

21.2.4 限制LOCK前缀的语义 271

21.2.5 增加的异常 271

21.3 与386TMCPU的差别 271

21.3.5 新的页表项位 272

21.3.4 新的控制寄存器位 272

21.3.6 装入段描述子时的变化 272

21.3.2 新的异常 272

21.3.1 新的标志 272

21.3.3 新的指令 272

第二十二章 实地址方式 273

22.1 地址的形式 273

22.2 寄存器和指令 274

22.3 中断和异常处理 274

22.4 进入和退出实地址方式 275

22.4.1 进入保护方式 275

22.5 返回实地址方式 275

22.6 实地址方式异常 276

22.7 与8086CPU的差别 277

22.8.3 通用寄存器的初始值 280

22.8.5 与算述协处理器的差别 280

22.8.4 总线保持 280

22.8.1 总线锁定 280

22.8 与80286CPU实地址方式的差别 280

22.8.2 指令的存贮位置 280

22.9 与386TMDX CPU实方式的差别 281

22.10 处理器类型检测代码 281

第二十三章 虚拟8086方式 282

23.1 运行8086CPU代码 282

23.1.1 寄存器和指令 282

23.2 V—8086任务的结构 283

23.1.2 地址转换 283

23.2.1 V—8086任务的分页 284

23.2.2 V—8086任务的保护 284

23.3 进入和退出V—8086方式 285

23.3.1 通过任务切换的转移 286

23.3.2 通过陷井门和中断门的转移 286

23.4 补充的敏感指令 287

23.4.1 仿真8086操作系统调用 287

23.5.2 存储映象的I/O 288

23.5.1 I/O映象的I/O 288

23.4.2 仿真可中断标志位 288

23.5 虚拟I/O 288

23.5.3 特殊I/O缓冲区 289

23.6与 8086CPU的区别 289

23.7 与实地址方式下的80286CPU的区别 291

23.7.1 特权级 291

23.7.2 总线封锁 291

23.8 与386TMDX和SX CPU的区别 292

第十四章 混合16位和32位的代码 293

24.1 使用16位和32位环境 293

24.2 混合16位和32位的操作 294

24.3 混合长度代码段中数据的共享 294

24.4 混合长度代码段中的控制转移 295

24.4.1 代码段指针的长度 295

24.4.2 控制转移的栈管理 295

24.4.4 参量转换 297

24.4.5 接口过程 297

24.4.3 中断控制转移 297

第二十五章 与387、80287和8087协处理器的兼容性 299

25.1 与386TMCPU/387TMNPX系统的区别 299

25.2 与80286/80287系统的区别 300

25.2.1 数据类型与异常处理 300

25.2.2 特征字、状态字与控制字 304

25.2.3 指令设置 306

25.3 与8086/8087系统的区别 309

26.1.1 缺省段属性 312

26.1.2 操作数长度和地址长度指令前缀 312

第五部分 i486指令集 312

26.1 操作数的地址长度属性 312

第二十六集 指令集 312

26.1.3 堆栈的地址长度属性 313

26.2 指令格式 313

26.2.1 ModR/M和SIB字节 314

26.2.2 如何阅读指令集 318

AAA 325

ADD 326

AAM 327

AAS 327

ADC 328

ADD 329

AND 330

ARPL 330

BOUND 331

BSF 332

BSR 333

BSWAP 334

BT 334

BTC 335

BTR 336

PTS 337

CALL 339

CBW/CWDE 342

CLD 343

CLC 343

CLI 344

CLTS 344

CMC 345

CMP 345

CMPS/CMPSB/CMPSD 346

CMPXCHG 348

DAA 349

CWD/CDC 349

DAS 350

DEC 351

DIV 351

ENTER 352

F2XM1 354

FABS 354

FADD/FADDP/FLADD 355

FBLD 356

FBSTP 356

FCLEX/FNCLEX 357

FCH3 357

FCOM/FCOMP/FCMPP 358

FCOS 359

FDECSTP 360

FDIV/FDIVP/FIDIV 361

FDIVR/FDIVPR/FIDIVR 362

FFREE 362

FICOM/FICOMP 363

FILD 364

FINIT/FNINIT 365

FINCSTP 365

FIST/FISTP 366

FLD 367

FLDI/FLD2F/FLD2E 368

FLDPI/FLDG2/FLDLN2/FLDZ 368

FLDCW 369

FLDENV 369

FMUL/FMULP/FIMUL 370

FNOP 371

FPATAN 371

FPREM1 373

F?TAN 374

F?NDINT 375

FRSTOR 376

F?AVE/FNSAVE 376

FSCALE 377

FSIN 378

FSINCOS 379

FSQRT 380

FST/FSTP 380

FSTCW/FNSTCW 381

FSTENV/FNSTENV 382

FSTSW/FNSTSW 383

FSUB/FSUBP/FISUB 384

FSUBR/FSUBPR/FISUBR 385

FUCOM/FUCOMP/FUCOMPP 385

FWAIT 387

FXAM 388

FXCH 388

FXTRACT 389

FYL2X 390

FYL2XP1 391

HLT 392

IDIV 392

IMUL 393

IN ……………………………………(?) 396

INC 396

INS/INSB/INSW/INSD 396

INT/INTO 398

INVD 400

INVLPG 401

IRET/IRETD 403

Jcc 408

JMP 411

LAHF 415

LAR 415

LEA 416

LEAVE 418

LGDT/LIDT 418

LGS/LSS/LDS/LES/LFS 420

LLDT…………………………………( 421 ) 422

LMSW 422

LOCK 423

LODS/LOSB/LODSW/LODSD 424

LOOP/LOOPcond 425

LSL 426

LTR 427

MOV 429

MOV 430

MOVSW/MOVSD 431

MOVS/MOVSB/ 431

MOVSX 433

MOVZX 433

MUL 434

NEG 435

NOP 435

NOT 436

OR 437

OUT 438

OUTS/OUTSB/ 439

OUTSW/OUTSD 439

POP 440

POPA/POPAD 442

POPF/POPFD 443

PUSH 444

PUSHA/PUSHAD 445

PUSHF/PUSHFD 446

RCL/RCR/ROR 447

REP/REPE/PEPZ/ 449

REPNE/REPNZ 449

RET 451

SAHF 454

SAL/SAR/SHL/SHR 455

SBB 457

SCAS/SCASB/SCASW/SCASD 458

SETcc 459

SGDT/SIDT 460

SHLD 461

SHRD 462

SLDT 463

SMSW 464

STD 465

STI 465

STC 465

STOS/STOSB/STOSW/STOSD 466

STR 467

SUB 468

TEST 470

VERR/VERW 470

WAIT 471

WBINVD 472

XADD 473

XCHG 474

XLAT/XLATB 474

XOR 475

A.2 编址方式的代码 477

A.1 缩写的关键 477

A.3 操作数类型的代码 477

附录A 操作码映象 477

A.4 寄存器代码 478

附录B 标志交叉引用 483

B.1 编码关键 483

C.1 状态标志 485

C.2 编码关键 485

附录C 状态标志归纳 485

附录D 条件代码 487

D.1 条件的定义 487

附录G 代码优化 500

附录F 数字异常小结 500

G.1 录址方式 500

附录E 指令格式与时序 500

G.2 预取单元 501

G.3 缓存和代码定位 501

G.4 NOP指令 502

G.5 整数指令 503

G.6 条件代码 504

G.7 串指令 505

G.8 浮点指针指令 505

G.10 时钟覆盖 506

G.11 杂项用法准则 506

G.9 前缓操作码 506

FPREM 3372