汇编与接口
文章平均质量分 77
Lin_PirxW
这个作者很懒,什么都没留下…
展开
-
一、MPU、总线简介以及汇编和接口概述
1. CPU和MPU的关系: a. CPU(Central Processor Unit,中央处理器): i. 通常情况下等同于MPU,作用都是运算和控制,是计算机的心脏; ii. 但是严格来说它应只包含控制器、运算器和寄存器; iii. CPU和其它功能器件一起被集成在一个超大规模集成电路原创 2013-09-02 18:37:03 · 4138 阅读 · 0 评论 -
四、代码段和指令指针
1. 人为定义的代码段: a. 按照上一节讲过的段的定义,只要是符合规则的内存地址空间的一部分都可以作为段,至于段的含义必须由人给出; b. 通常编程时会根据人的需要会选择内存地址空间的一些不同空间分别存放程序运行的代码(指令)和程序需要处理的数据,随着程序规模的扩大和逐渐复杂也会产生新的需求,比如定义全局变量以及为函数调用服务的栈等; c. 因原创 2013-09-19 14:09:29 · 2525 阅读 · 0 评论 -
[MASM]程序中可用的寄存器
1. 通用寄存器: a. 先对几个大写英文字母做一些说明: E:Extended,即扩展的意思,在这里表示从16位扩展成32位,表示寄存器容量的升级; X:即Register的意思,仅仅指寄存器; A:Accumulator,即累加的意思; B:Base,即基址的意思;原创 2013-09-06 15:24:42 · 1816 阅读 · 0 评论 -
十五、嵌套循环
1. 程序示例:将每行中的单词都变为大写assume cs:code, ds:data, ss:stackdata segment db 'ibm ' db 'dec ' db 'dos ' db 'vax 'data endsstack segment dw 0,原创 2013-11-10 21:30:55 · 1091 阅读 · 0 评论 -
十八、使用call和ret指令实现子程序的调用和返回
1. 子程序返回: a. 可以用一个标号来标志一段子程序,在C语言里面就是所谓的函数; b. 在子程序的末尾必须使用一个返回指令,将程序返回到调用子程序的位置处,这里先不讨论如何返回程序中的值,先讨论如何使程序回到调用子程序的位置处; c. 使用ret指令实现近返回: i. 即近转移,return的缩写,只修改ip的原创 2013-11-15 21:19:04 · 8270 阅读 · 0 评论 -
十七、转移指令
1. 通过seg和offset操作符获取标号的段地址和偏移地址: 1) 这两个都是伪指令,都是属于编译器的操作符,不能直接翻译成机器代码,前者是segment的缩写,而后者的意思就是“偏移量”; 2) 这两者可以作用于任何标号,前者用于获取标号所在段的段基,后者用于获取标号所在段的偏移地址,这里的段都是由"XXX segment"定义的段,而这个XXX(也是标号)就是段基了;原创 2013-11-14 13:44:22 · 2916 阅读 · 0 评论 -
十六、数据处理问题的若干补充
1. 内存访问方式以及bp寄存器的补充: a. 偏移地址的完整描述: i. 可以分三个部分描述; ii. 段中一个完整数据项(比如结构体)的入口处地址,即基址,bx或bp; iii. 数据项中某个字段的入口处地址,即常数; iv. 字段中每个元素的偏移地址,即si、di原创 2013-11-11 20:17:15 · 985 阅读 · 0 评论 -
十二、分段程序
1. 使用db、dw、dd以及dup伪指令定义一段连续的数据空间: 1) 对于前三个伪指令,前缀d表示define,而后面的三个字母分别表示byte、word、double word的意思,分别用于定义字节空间、字空间、双字空间; 2) 示例:assume cs:codesgcodesg segment db 0, 1, 2, 3 dw 0, 1, 2, 3 dd原创 2013-10-22 21:20:09 · 1004 阅读 · 0 评论 -
五、Debug的简单使用
1. bug和debug的由来: i. 最早的计算机都是用电子管搭的,一次实验中因为电子管的光热引入一只小飞虫(bug)进入其真空结构内导致整个计算机瘫痪,废了科学家好长时间才排除了这个故障电子管,当时他们把这个排除故障的过程调侃为去除虫子(debug); ii. 现在人们将bug当做计算机系统、程序中的错误、漏洞和缺陷,而排除这些错误和漏洞的过程就叫de原创 2013-09-19 15:33:32 · 972 阅读 · 0 评论 -
十四、更为灵活地访问内存
1. [bx + 常数]: a. 显而易见就是以bx和常数相加的值作为总的偏移地址,但是这样一来就可以以ds:[bx]作为基址,而常数作为偏移地址了,给内存的访问带来更多的灵活性; b. Debug中允许的书写形式: i. [bx + 常数] ii. [常数 + bx] iii.原创 2013-11-08 20:02:29 · 587 阅读 · 0 评论 -
十三、按位与或以及大小写转换
1. 按位与或指令: a. and指令表示按位与,or指令表示按位或; b. 两条指令的参数完全相同,都是将第一个参数和第二个参数进行按位运算,并将结果保存在第一个参数中; c. 参数示意: 第一个参数 第二个参数 寄存器 常数 内存原创 2013-11-08 19:30:35 · 1318 阅读 · 0 评论 -
八、汇编源程序的基本构成以及编译、调试
1. 以第一个汇编源程序为例说明:assume cs:codesgcodesg segment mov ax, 0123H mov bx, 0456H add ax, bx add ax, ax mov ax, 4C00H int 21Hcodesg endsend 1) 汇编指令和伪指令的区别:首先这里要讲两个概念,即汇编语言包含什么,其总共包含原创 2013-10-21 15:52:25 · 1218 阅读 · 0 评论 -
七、栈段
1. CPU的栈操作的支持: 1) 现代CPU都提供栈的功能,即提供栈的访问功能,指令有push和pop等; 2) 8086CPU对栈的操作(push、pop等)都是以字为单位的,即16位,因此不得在栈操作中使用非16位的寄存器,如AL等,否则将会报错;2. 用SS:SP定义一个内存栈: 1) 和前面利用DS寄存器定义一个数据段一样,栈同样也是存在于用户原创 2013-10-21 13:41:13 · 1109 阅读 · 0 评论 -
九、访问内存的要素以及INC和LOOP指令和Debug使用方法的扩
1. 访问内存的要素: a. 总共只有两大要素:一是内存单元的地址,而是内存单元的类型; b. 内存单元的首地址由DS:[X]确定,而内存单元的类型(字节型还是字型)由寄存器的类型给出,比如访问内存的寄存器的类型是16位的,则访问的内存单元的类型就是字型的; c. 这里补充如下访问内存的方法:MOV [寄存器], 寄存器,当然这两个参数交换位置同原创 2013-10-21 20:57:32 · 2711 阅读 · 0 评论 -
六、数据段
1. CPU的字单元和内存的字节单元: a. CPU可以是16位、32位的,因此其存储单元可以是字、双字等; b. 但是内存是严格的字节单元,即一个内存单元存放一个字节数据; c. 内存字单元的概念: i. 即使内存是字节单元的,但是仍然可以认为定义内存的字单元; ii. 当将CPU中的一原创 2013-10-21 12:10:51 · 1182 阅读 · 0 评论 -
十九、用call和ret指令实现模块化程序设计
1. 利用调用和返回的对应可以实现类似函数的功能: a. 其实高级语言中函数的实现即时基于汇编的call和ret的; b. 这样就可以设计一个个用于解决子问题的子程序,通过调用和返回将各个子程序组合成一个解决大问题的主程序;2. 利用寄存器传参和返回: a. 在传送的数据量不是很少的情况下可以使用,但是如果传送的批量的数据时寄存器原创 2013-11-15 23:51:16 · 1288 阅读 · 0 评论 -
十、实模式和保护模式简介
1. 纯DOS的实模式: a. 背景是DOS特别简单,没有能力对硬件系统进行全面、严格地管理,因此对用户的一些非法操作将不会检查到,从而这些非法操作可能会导致系统崩溃; b. 因此在DOS系统中用户可以毫无顾虑地对硬件进行操作,而不受到操作系统的限制; c. 这就是实模式; d. 如果在实模式下用户非法修改了DOS系统在内存中的空原创 2013-10-22 14:45:09 · 1152 阅读 · 0 评论 -
二、存储器和寄存器简介
1. 扩展插槽和接口卡: a. 扩展插槽位于主板上; b. 扩展插槽一般插有RAM内存条和接口卡; c. CPU不能直接控制外设,而接口卡可以直接控制外设,因此CPU和接口卡插槽用总线相连,从而实现CPU通过控制接口卡的方式间接控制外设;2. 各类存储器芯片: a. 注意:不要狭隘地认为存储器就是磁盘,而其实存储原创 2013-09-17 15:49:59 · 1194 阅读 · 0 评论 -
三、物理地址和段的概念
1. 物理地址的概念: a. 物理地址就是指CPU的内存地址空间中的地址; b. 内存地址空间将所有不同存储设备的存储空间都整合成了一个以为线性的地址空间; c. 其中每个内存单元都对应了一个地址,所有内存单元按照地址从低到高线性排列(这里定义一个内存单元的宽度是1B); d. 每个存储设备都占据内存地址空间中不同的部分;原创 2013-09-17 20:30:15 · 3400 阅读 · 0 评论