第1章 基础知识1<br>1.1 机器语言1<br>1.2 汇编语言的产生2<br>1.3 汇编语言的组成3<br>1.4 存储器3<br>1.5 指令和数据4<br>1.6 存储单元4<br>1.7 CPU对存储器的读写4<br>1.8 地址总线6<br>1.9 数据总线7<br>1.10 控制总线8<br>1.11 内存地址空间(概述)9<br>1.12 主板9<br>1.13 接口卡9<br>1.14 各类存储器芯片9<br>1.15 内存地址空间10<br><br>第2章 寄存器(CPU工作原理)13<br>2.1 通用寄存器13<br>2.2 字在寄存器中的存储15<br>2.3 几条汇编指令16<br>2.4 物理地址18<br>2.5 16位结构的CPU18<br>2.6 8086CPU给出物理地址的方法19<br>2.7 “段地址×16+偏移地址=物理地址”的本质含义20<br>2.8 段的概念22<br>2.9 段寄存器23<br>2.10 CS和IP23<br>2.11 修改CS、IP的指令30<br>2.12 代码段32<br>实验1 查看CPU和内存,用机器指令和汇编指令编程33<br><br>第3章 寄存器(内存访问)45<br>3.1 内存中字的存储45<br>3.2 DS和[address]46<br>3.3 字的传送47<br>3.4 mov、add、sub指令49<br>3.5 数据段51<br>3.6 栈53<br>3.7 CPU提供的栈机制55<br>3.8 栈顶超界的问题58<br>3.9 push、pop指令60<br>3.10 栈段64<br>实验2 用机器指令和汇编指令编程67<br><br>第4章 第1个程序71<br>4.1 一个源程序从写出到执行的过程71<br>4.2 源程序72<br>4.3 编辑源程序77<br>4.4 编译77<br>4.5 连接79<br>4.6 以简化的方式进行编译和连接82<br>4.7 1.exe的执行83<br>4.8 可执行文件中的程序装入内存并运行的原理83<br>4.9 程序执行过程的跟踪85<br>实验3 编程、编译、连接、跟踪88<br><br>第5章 [bx]和loop指令89<br>5.1 [bx]91<br>5.2 Loop指令93<br>5.3 在Debug中跟踪用loop指令实现的循环程序96<br>5.4 Debug和汇编编译器Masm对指令的不同处理102<br>5.5 loop和[bx]的联合应用105<br>5.6 段前缀108<br>5.7 一段安全的空间109<br>5.8 段前缀的使用111<br>实验4 [bx]和loop的使用113<br><br>第6章 包含多个段的程序114<br>6.1 在代码段中使用数据114<br>6.2 在代码段中使用栈118<br>6.3 将数据、代码、栈放入不同的段120<br>实验5 编写、调试具有多个段的程序123<br><br>第7章 更灵活的定位内存地址的方法126<br>7.1 and和or指令126<br>7.2 关于ASCII码126<br>7.3 以字符形式给出的数据127<br>7.4 大小写转换的问题128<br>7.5 [bx+idata]131<br>7.6 用[bx+idata]的方式进行数组的处理132<br>7.7 SI和DI134<br>7.8 [bx+si]和[bx+di]136<br>7.9 [bx+si+idata]和[bx+di+idata]138<br>7.10 不同的寻址方式的灵活应用139<br>实验6 实践课程中的程序147<br><br>第8章 数据处理的两个基本问题148<br>8.1 bx、si、di、bp148<br>8.2 机器指令处理的数据所在位置149<br>8.3 汇编语言中数据位置的表达150<br>8.4 寻址方式151<br>8.5 指令要处理的数据有多长?152<br>8.6 寻址方式的综合应用153<br>8.7 div指令156<br>8.8 伪指令dd158<br>8.9 dup159<br>实验7 寻址方式在结构化数据访问中的应用160<br><br>第9章 转移指令的原理162<br>9.1 操作符offset162<br>9.2 jmp 指令164<br>9.3 依据位移进行转移的jmp指令164<br>9.4 转移的目的地址在指令中的jmp指令168<br>9.5 转移地址在寄存器中的jmp指令169<br>9.6 转移地址在内存中的jmp指令169<br>9.7 jcxz指令171<br>9.8 loop指令172<br>9.9 根据位移进行转移的意义173<br>9.10 编译器对转移位移超界的检测174<br>实验8 分析一个奇怪的程序174<br>实验9 根据材料编程175<br><br>第10章 call和ret指令178<br>10.1 ret和retf178<br>10.2 call指令180<br>10.3 依据位移进行转移的call指令180<br>10.4 转移的目的地址在指令中的call指令181<br>10.5 转移地址在寄存器中的call指令182<br>10.6 转移地址在内存中的call指令182<br>10.7 call和ret的配合使用184<br>10.8 mul指令187<br>10.9 模块化程序设计188<br>10.10 参数和结果传递的问题188<br>10.11 批量数据的传递190<br>10.12 寄存器冲突的问题191<br>实验10 编写子程序194<br>课程设计1200<br><br>第11章 标志寄存器202<br>11.1 ZF标志202<br>11.2 PF标志203<br>11.3 SF标志204<br>11.4 CF标志205<br>11.5 OF标志206<br>11.6 adc指令208<br>11.7 sbb指令211<br>11.8 cmp指令211<br>11.9 检测比较结果的条件转移指令215<br>11.10 DF标志和串传送指令219<br>11.11 pushf和popf223<br>11.12 标志寄存器在Debug中的表示223<br>实验11 编写子程序224<br><br>第12章 内中断225<br>12.1 内中断的产生225<br>12.2 中断处理程序226<br>12.3 中断向量表226<br>12.4 中断过程227<br>12.5 中断处理程序228<br>12.6 除法错误中断的处理229<br>12.7 编程处理0号中断229<br>12.8 安装232<br>12.9 do0235<br>12.10 设置中断向量238<br>12.11 单步中断238<br>12.12 响应中断的特殊情况239<br>实验12 编写0号中断的处理程序240<br><br>第13章 int指令241<br>13.1 int指令241<br>13.2 编写供应用程序调用的中断例程242<br>13.3 对int、iret和栈的深入理解245<br>13.4 BIOS和DOS所提供的中断例程247<br>13.5 BIOS和DOS中断例程的安装过程248<br>13.6 BIOS中断例程应用248<br>13.7 DOS中断例程应用250<br>实验13 编写、应用中断例程251<br><br>第14章 端口254<br>14.1 端口的读写254<br>14.2 CMOS RAM芯片255<br>14.3 shl和shr指令256<br>14.4 CMOS RAM中存储的时间信息258<br>实验14 访问CMOS RAM260<br><br>第15章 外中断261<br>15.1 接口芯片和端口261<br>15.2 外中断信息261<br>15.3 PC机键盘的处理过程263<br>15.4 编写int 9中断例程264<br>15.5 安装新的int 9中断例程272<br>实验15 安装新的int 9中断例程274<br>指令系统总结274<br><br>第16章 直接定址表276<br>16.1 描述了单元长度的标号276<br>16.2 在其他段中使用数据标号278<br>16.3 直接定址表281<br>16.4 程序入口地址的直接定址表285<br>实验16 编写包含多个功能子程序的中断例程289<br><br>第17章 使用BIOS进行键盘输入和磁盘读写290<br>17.1 int 9中断例程对键盘输入的处理290<br>17.2 使用int 16h中断例程读取键盘缓冲区291<br>17.3 字符串的输入294<br>17.4 应用int 13h中断例程对磁盘进行读写298<br>实验17 编写包含多个功能子程序的<br>中断例程301<br>课程设计2302<br>附注304<br>附注1 Intel系列微处理器的三种工作模式304<br>附注2 补码305<br>附注3 汇编编译器(masm.exe)对jmp的相关处理307<br>附注4 用栈传递参数310<br>附注5 公式证明313
展开