收藏 分销(赏)

微机原理和接口技术知识点总结.doc

上传人:仙人****88 文档编号:11230926 上传时间:2025-07-09 格式:DOC 页数:24 大小:467.54KB 下载积分:10 金币
下载 相关 举报
微机原理和接口技术知识点总结.doc_第1页
第1页 / 共24页
微机原理和接口技术知识点总结.doc_第2页
第2页 / 共24页


点击查看更多>>
资源描述
微机原理与接口技术 《微机原理与接口技术》复习参考资料 第一章 我想计算机系统基本组成原理 一、计算机中的数制 1、无符号数的表示方法: (1)十进制计数的表示法 特点:以十为底,逢十进一; 共有0-9十个数字符号。 (2)二进制计数表示方法: 特点:以2为底,逢2进位; 只有0和1两个符号。 (3)十六进制数的表示法: 特点:以16为底,逢16进位; 有0--9及A—F(表示10~15)共16个数字符号。 2、各种数制之间的转换 (1)非十进制数到十进制数的转换 按相应进位计数制的权表达式展开,再按十进制求和。(见书本1.2.3,1.2.4) (2)十进制数制转换为二进制数制 l十进制 → 二进制的转换: 整数部分:除2取余; 小数部分:乘2取整。 l十进制 → 十六进制的转换: 整数部分:除16取余; 小数部分:乘16取整。 以小数点为起点求得整数和小数的各个位。 (3)二进制与十六进制数之间的转换 用4位二进制数表示1位十六进制数 3、二进制数的逻辑运算 特点:按位运算,无进借位 (1)与运算:只有A、B变量皆为1时,与运算的结果就是1 (2)或运算:A、B变量中,只要有一个为1,或运算的结果就是1 (3)非运算 (4)异或运算:A、B两个变量只要不同,异或运算的结果就是1 4、无符号数的机器数表示方法 (1)位数不等的二进制码 (2)BCD码:计算机中的10进制数,用二进制表示的十进制数 (3)ASCII码:计算机中的输入输出设备中使用的字符信息编码 二、计算机中的码制 1、对于符号数,机器数常用的表示方法有原码、反码和补码三种。数X的原码记作[X]原,反码记作[X]反,补码记作[X]补。注意:对正数,三种表示法均相同。它们的差别在于对负数的表示。 (1)原码:符号位:0表示正,1表示负; 数值位:真值的绝对值。 注意:数0的原码不唯一 (2)反码:若X>0 ,则 [X]反=[X]原;若X<0, 则 [X]反= 对应原码的符号位不变,数值部分按位求反;注意:数0的反码也不唯一 (3)补码:若X>0, 则[X]补= [X]反= [X]原;若X<0, 则[X]补= [X]反+1;计算机中有符号数都是以补码的形式出现。注意:机器字长为8时,数0的补码唯一,同为00000000 2、8位二进制的表示范围: 原码:-127~+127 反码:-127~+127 补码:-128~+127 三、微型计算机系统组成结构 1、计算机的经典结构——冯.诺依曼结构 (1)计算机由运算器、控制器、输入设备和输出设备五大部分组成(运算器和控制器又称为CPU) (2)数据和程序以二进制代码形式不加区分地存放在存储器总,存放位置由地址指定,数制为二进制。 (3)控制器是根据存放在存储器中的指令序列来操作的,并由一个程序计数器控制指令的执行。 2、系统总线的分类 (1)数据总线(Data Bus),它决定了处理器的字长。 (2)地址总线(Address Bus),它决定系统所能直接访问的存储器空间的容量。(3)控制总线(Control Bus) 3、中央处理器在内部结构上由运算器、控制器、寄存器阵列和内部总线等各部分构成,其主要功能是完成各种算数及逻辑运算,并实现对整个微型计算机控制,为此,其内部又必须具备传递和暂存数据的功能。 4、微处理器,用于实现微型计算机的运算和控制功能,是微型计算机的核心;一台微型计算机由微处理器、内存储器、I/O接口电路以及总线构成;微型计算机系统则包括硬件系统和软件系统两大部分,其中硬件系统又包括微型计算机和外围设备。 第二章 微处理器和指令系统 一、8086微处理器 1、8086是一种单片微处理芯片,其内部数据总线的宽度是16位,外部数据总线宽度也是16位,片内包含有控制计算机所有功能的各种电路。8086地址总线的宽度为20位,有1MB(220个存储单元)个存储单元寻址空间。8086CPU由总线接口部件BIU和执行部件EU组成。BIU和EU的操作是异步的,为8086取指令和执行指令的并行操作体统硬件支持。 2、寄存器结构 l 8086微处理器包含有13个16位的寄存器和9位标志位。 l 4个通用寄存器(AX,BX,CX,DX) l 4个段寄存器(CS,DS,SS,ES) l 4个指针和变址寄存器(SP,BP,SI,DI) l 指令指针(IP) 1)、通用寄存器 (1)8086含4个16位数据寄存器,它们又可分为8个8位寄存器,即: lAX èAH,AL lBXèBH,BL lCXèCH,CL lDXèDH,DL 常用来存放参与运算的操作数或运算结果 (2)数据寄存器特有的习惯用法 lAX:累加器。多用于存放中间运算结果。所有I/O指令必须都通过AX与接口传送信息; lBX:基址寄存器。在间接寻址中用于存放基地址; lCX:计数寄存器。用于在循环或串操作指令中存放循环次数或重复次数; lDX:数据寄存器。在32位乘除法运算时,存放高16位数;在间接寻址的I/O指令中存放I/O端口地址。 2)、指针和变址寄存器 lSP:堆栈指针寄存器,其内容为栈顶的偏移地址; lBP:基址指针寄存器,常用于在访问内存时存放内存单元的偏移地址。 lSI:源变址寄存器 lDI:目标变址寄存器 变址寄存器常用于指令的间接寻址或变址寻址。 3)、段寄存器 CS:代码段寄存器,代码段用于存放指令代码 DS:数据段寄存器 ES:附加段寄存器,数据段和附加段用来存放操作数 SS:堆栈段寄存器,堆栈段用于存放返回地址,保存寄存器内容,传递参数 4)、指令指针(IP) 16位指令指针寄存器,其内容为下一条要执行的指令的偏移地址。 5)、标志寄存器 (1)状态标志: l进位标志位(CF):运算结果的最高位有进位或有借位,则CF=1 l辅助进位标志位(AF):运算结果的低四位有进位或借位,则AF=1 l溢出标志位(OF):运算结果有溢出,则OF=1 l零标志位(ZF):反映指令的执行是否产生一个为零的结果 l符号标志位(SF):指出该指令的执行是否产生一个负的结果 l奇偶标志位(PF):表示指令运算结果的低8位“1”个数是否为偶数 (2)控制标志位 l中断允许标志位(IF):表示CPU是否能够响应外部可屏蔽中断请求 l跟踪标志(TF):CPU单步执行 l方向标志DF:用来决定在串操作指令执行时有关指针寄存器发生调整的方向。 二、8086指令系统 (一)数据寻址方式 1、立即寻址: 操作数(为一常数)直接由指令给出,(此操作数称为立即数),立即寻址只能用于源操作数 例: MOV AX, 1C8FH MOV BYTE PTR[2A00H], 8FH 错误例: × MOV 2A00H,AX ; 错误! 指令操作例:MOV AX,3102H; AXè3102H 执行后,(AH) = 31H,(AL) = 02H 2、寄存器寻址 (1)操作数放在某个寄存器中 (2)源操作数与目的操作数字长要相同 (3)寄存器寻址与段地址无关 例: MOV AX, BX MOV [3F00H], AX MOV CL, AL 错误例: × MOV AX,BL ; 字长不同 × MOV ES:AX,DX ; 寄存器与段无关 3、直接寻址 (1)指令中直接给出操作数的16位偏移地址 偏移地址也称为有效地址(EA, Effective Address) (2)默认的段寄存器为DS,但也可以显式地指定其他段寄存器——称为段超越前缀 (3)偏移地址也可用符号地址来表示,如ADDR、VAR 例: MOV AX ,[2A00H] MOV DX ,ES:[2A00H] MOV SI,TABLE_PTR 4、间接寻址 l 操作数的偏移地址(有效地址EA)放在寄存器中 l 只有SI、DI、BX和BP可作间址寄存器 l 例: MOV AX,[BX] MOV CL,CS:[DI] 错误例 :× MOV AX, [DX] × MOV CL, [AX] 5、寄存器相对寻址 lEA=间址寄存器的内容加上一个8/16位的位移量 l 例: MOV AX, [BX+8] MOV CX, TABLE[SI] MOV AX, [BP]; 默认段寄存器为SS l 指令操作例:MOV AX,DATA[BX] 若(DS)=6000H, (BX)=1000H, DATA=2A00H, (63A00H)=66H, (63A01H)=55H 则物理地址 = 60000H + 1000H + 2A00H = 63A00H 指令执行后:(AX)=5566H 6、基址变址寻址 l 若操作数的偏移地址: 由基址寄存器(BX或BP)给出 —— 基址寻址方式 由变址寄存器(SI或DI)给出 —— 变址寻址方式 由一个基址寄存器的内容和一个变址寄存器的内容相加而形成操作数的偏移地址,称为基址-变址寻址。 EA=(BX)+(SI)或(DI); EA=(BP)+(SI)或(DI) 同一组内的寄存器不能同时出现。 注意:除了有段跨越前缀的情况外,当基址寄存器为BX时,操作数应该存放在数据段DS中,当基址寄存器为BP时,操作数应放在堆栈段SS中。 例: MOV AX, [BX] [SI] MOV AX, [BX+SI] MOV AX, DS: [BP] [DI] 错误例: × MOV AX, [BX] [BP] × MOV AX, [DI] [SI] 指令操作例:MOV AX,[BX][SI] 假定:(DS)=8000H, (BX)=2000H, SI=1000H 则物理地址 = 80000H + 2000H + 1000H = 83000H 指令执行后: (AL)=[83000H] (AH)=[83001H] 7、相对基址变址寻址 l 在基址-变址寻址的基础上再加上一个相对位移量 EA=(BX)+(SI)或(DI)+8位或16位位移量; EA=(BP)+(SI)或(DI)+8位或16位位移量 指令操作例:MOV AX,DATA[DI][BX] 若(DS)=8000H, (BX)=2000H, (DI)=1000H, DATA=200H 则指令执行后(AH)=[83021H], (AL)=[83020H] 寄存器间接、寄存器相对、基址变址、相对基址变址四种寻址方式的比较: 寻址方式 指令操作数形式 n 寄存器间接 只有一个寄存器(BX/BP/SI/DI之一) n 寄存器相对 一个寄存器加上位移量 n 基址—变址 两个不同类别的寄存器 n 相对基址-变址 两个不同类别的寄存器加上位移量 (二)指令地址寻址方式(了解有4类,能判断) 简要判断依据(指令中间的单词): 段内直接 short,near 段内间接 word 段间直接 far 段间间接 dword (三)数据传送指令 1、通用传送指令 (1) MOV dest,src; dest←src 传送的是字节还是字取决于指令中涉及的寄存器是8位还是16位。 具体来说可实现: ① MOV mem/reg1,mem/reg2 指令中两操作数中至少有一个为寄存器 ② MOV reg,data ;立即数送寄存器 ③ MOV mem,data ;立即数送存储单元 ④ MOV acc,mem ;存储单元送累加器 ⑤ MOV mem,acc ;累加器送存储单元 ⑥ MOV segreg,mem/reg ;存储单元/寄存器送段寄存器 ⑦ MOV mem/reg,segreg ;段寄存器送存储单元/寄存器 MOV指令的使用规则 ①IP不能作目的寄存器 ②不允许mem←mem ③不允许segreg←segreg ④立即数不允许作为目的操作数 ⑤不允许segreg←立即数 ⑥源操作数与目的操作数类型要一致 ⑦当源操作数为单字节的立即数,而目的操作数为间址、变址、基址+变址的内存数时,必须用PTR说明数据类型。如:MOV [BX],12H 是错误的。 (2)、堆栈指令 什么是堆栈? 按“后进先出(LIFO)”方式工作的存储区域。堆栈以字为单位进行压入弹出操作。 规定由SS指示堆栈段的段基址,堆栈指针SP始终指向堆栈的顶部,SP的初值规定了所用堆栈区的大小。堆栈的最高地址叫栈底。 ① 压栈指令PUSH PUSH src ; src为16位操作数 例:PUSH AX ;将AX内容压栈 执行操作:(SP)-1←高字节AH (SP)-2←低字节AL (SP)←(SP)- 2 注意进栈方向是高地址向低地址发展。` ② 弹出指令POP POP dest 例:POP BX ;将栈顶内容弹至BX 执行操作:(BL)←(SP) (BH)←(SP)+1 (SP)←(SP)+2 堆栈指令在使用时需注意的几点: ① 堆栈操作总是按字进行 ② 不能从栈顶弹出一个字给CS ③ 堆栈指针为SS:SP,SP永远指向栈顶 ④SP自动进行增减量(-2,+2) (3)、交换指令XCHG 格式:XCHG reg,mem/reg 功能:交换两操作数的内容。 要求:两操作数中必须有一个在寄存器中; 操作数不能为段寄存器和立即数; 源和目地操作数类型要一致。 举例: XCHG AX,BX XCHG [2000],CL 2、输入输出指令 只限于用累加器AL或AX来传送信息。 功能: (累加器)←→I/O端口 (1) 输入指令IN 格式: IN acc,PORT ;PORT端口号0~255H IN acc,DX ;DX表示的端口范围达64K 例:IN AL,80H ;(AL)←(80H端口) IN AL,DX ;(AL)←((DX)) (2) 输出指令OUT 格式:OUT port,acc OUT DX,acc 例:OUT 68H,AX ;(69H,68H)←(AX) OUT DX,AL ;((DX))←(AL) 在使用间接寻址的IN/OUT指令时,要事先用传送指令把I/O端口号设置到DX寄存器 如: MOV DX,220H IN AL,DX;将220H端口内容读入AL 3、目标地址传送指令 (1) LEA 传送偏移地址 格式:LEA reg,mem ; 将指定内存单元的偏移地址送到指定寄存器 要求: 1) 源操作数必须是一个存储器操作数; 2) 目的操作数必须是一个16位的通用寄存器。 例:LEA BX,[SI+10H] 设:(SI)=1000H 则执行该指令后,(BX)=1010H l注意以下二条指令差别: LEA BX,BUFFER MOV BX,BUFFER 前者表示将符号地址为BUFFER的存储单元的偏移地址取到 BX中;后者表示将BUFFER存储单元中的内容取到 BX中。 下面两条指令等效: LEA BX,BUFFER MOV BX, OFFSET BUFFER 其中OFFSET BUFFER表示存储器单元BUFFER的偏移地址。 二者都可用于取存储器单元的偏移地址,但LEA指令可以取动态的地址,OFFSET只能取静态的地址。 (四)算术运算指令 1、 加法指令 (1) 不带进位的加法指令ADD 格式: ADD acc,data ADD mem/reg,data ADD mem/reg1,mem/reg2 实例: ADD AL,30H ADD SI,[BX+20H] ADD CX,SI ADD [DI],200H •ADD指令对6个状态标志均产生影响。 例:已知(BX)=D75FH 指令 ADD BX,8046H 执行后,状态标志各是多少? D75FH = 1110 0111 0101 1111 8046H = 1000 0000 0100 0110 1 1 11 11 0110 0111 1010 0101 结果:C=1, Z=0, P=0, A=1, O=1, S=0 判断溢出与进位 从硬件的角度:默认参与运算的操作数都是有符号数,当两数的符号位相同,而和的结果相异时有溢出,则OF=1,否则OF=0 (2) 带进位的加法ADC ADC指令在形式上和功能上与ADD类似,只是相加时还要包括进位标志CF的内容,例如: ADC AL,68H ; AL←(AL)+68H+(CF) ADC AX,CX ;AX←(AX)+(CX)+(CF) ADC BX,[DI] ;BX←(BX)+[DI+1][DI]+(CF) (3)加1指令INC 格式:INC reg/mem 功能:类似于C语言中的++操作:对指定的操作数加1 例: INC AL INC SI INC BYTE PTR[BX+4] 注:本指令不影响CF标志。 2、 减法指令 (1)不考虑借位的减法指令SUB 格式: SUB dest, src 操作: dest←(dest)-(src) 注:1.源和目的操作数不能同时为存储器操作数 2.立即数不能作为目的操作数 指令例子: SUB AL,60H SUB [BX+20H],DX SUB AX,CX (2)考虑借位的减法指令SBB SBB指令主要用于多字节的减法。 格式: SBB dest, src 操作: dest←(dest)-(src)-(CF) 指令例子: SBB AX,CX SBB WORD PTR[SI],2080H SBB [SI],DX (3)减1指令DEC 作用类似于C语言中的”--”操作符。 格式:DEC opr 操作:opr←(opr)-1 指令例子: DEC CL DEC BYTE PTR[DI+2] DEC SI (4)求补指令NEG 格式: NEG opr 操作: opr← 0-(opr) 对一个操作数取补码相当于用0减去此操作数,故利用NEG指令可得到负数的绝对值。 例:若(AL)=0FCH,则执行 NEG AL后, (AL)=04H,CF=1 (5)比较指令CMP 格式: CMP dest, src 操作: (dest)-(src) CMP也是执行两个操作数相减,但结果不送目标操作数,其结果只反映在标志位上。 指令例子: CMP AL,0AH CMP CX,SI CMP DI,[BX+03] (五)逻辑运算和移位指令 1、逻辑运算指令 (1)逻辑与AND 对两个操作数进行按位逻辑“与”操作。 格式:AND dest, src 用途:保留操作数的某几位,清零其他位。 例1:保留AL中低4位,高4位清0。 AND AL,0FH (2)逻辑或OR 对两个操作数进行按位逻辑”或”操作。 格式:OR dest, src 用途:对操作数的某几位置1;对两操作数进行组合。 例1:把AL中的非压缩BCD码变成相应十进制数的ASCII码。 OR AL, 30H (3)逻辑非NOT 对操作数进行按位逻辑”非”操作。 格式:NOT mem/reg 例:NOT CX NOT BYTE PTR[DI] (4)逻辑异或XOR 对两个操作数按位进行”异或”操作。 格式:XOR dest, src 用途:对reg清零(自身异或) 把reg/mem的某几位变反(与’1’异或) 例1:把AX寄存器清零。 ①MOV AX,0 ②XOR AX,AX ③AND AX,0 ④SUB AX,AX (5)测试指令TEST 操作与AND指令类似,但不将”与”的结果送回,只影响标志位。 TEST指令常用于位测试,与条件转移指令一起用。 例:测试AL的内容是否为负数。 TEST AL,80H ;检查AL中D7=1? JNZ MINUS ;是1(负数),转MINUS … … ;否则为正数 2、移位指令 (1)非循环移位指令 算术左移指令 SAL(Shift Arithmetic Left) 算术右移指令 SAR(Shift Arithmetic Right) 逻辑左移指令 SHL(Shift Left) 逻辑右移指令 SHR(Shift Right) 这4条指令的格式相同,以SAL为例: CL ;移位位数大于1时 SAL mem/reg 1 ;移位位数等于1时 Ø算术移位——把操作数看做有符号数; 逻辑移位——把操作数看做无符号数。 Ø移位位数放在CL寄存器中,如果只移1位,也 可以直接写在指令中。例如: MOV CL,4 SHR AL,CL ;AL中的内容右移4位 Ø影响C,P,S,Z,O标志。 Ø结果未溢出时: 左移1位≡操作数*2 右移1位≡操作数/2 例:把AL中的数x乘10 因为10=8+2=23+21,所以可用移位实现乘10操作。程序如下: MOV CL,3 SAL AL,1 ; 2x MOV AH,AL SAL AL,1 ; 4x SAL AL,1 ; 8x ADD AL,AH ; 8x+2x = 10x (六)控制转移指令 1、 转移指令 (1)无条件转移指令JMP 格式:JMP label 本指令无条件转移到指定的目标地址,以执行从该地址开始的程序段。 (2)条件转移指令(补充内容) ① 根据单个标志位设置的条件转移指令 JB/JC ;低于,或CF=1,则转移 JNB/JNC/JAE ;高于或等于,或CF=0,则转移 JP/JPE ;奇偶标志PF=1(偶),则转移 JNP/JPO ;奇偶标志PF=0(奇),则转移 JZ/JE ;结果为零(ZF=1),则转移 JNZ/JNE ;结果不为零(ZF=0),则转移 JS ;SF=1,则转移 JNS ;SF=0,则转移 JO ;OF=1,则转移 JNO ;OF=0,则转移 ②根据组合条件设置的条件转移指令 这类指令主要用来判断两个数的大小。 ★判断无符号数的大小 lJA 高于则转移 条件为: CF=0∧ZF=0,即A>B lJNA/JBE 低于或等于则转移 条件为: CF=1∨ZF=1,即A≤B lJB A<B则转移 lJNB A≥B则转移 ★判断有符号数的大小 lJG ;大于则转移(A>B) 条件为: (SF⊕OF=0)∧ZF=0 lJGE;大于或等于则转移(A≥B) 条件为: (SF⊕OF=0)∨ZF=1 lJLE;小于或等于则转移(A≤B) 条件为: (SF⊕OF=1)∨ZF=1 lJL;小于则转移(A<B= 条件为: (SF⊕OF=1)∧ZF=0 2、循环控制指令 l用在循环程序中以确定是否要继续循环。 l循环次数通常置于CX中。 l转移的目标应在距离本指令-128~+127的范围之内。 l循环控制指令不影响标志位。 (1)LOOP 格式:LOOP label 操作:(CX)-1→CX; 若(CX)≠0,则转至label处执行; 否则退出循环,执行LOOP后面的指令。 LOOP指令与下面的指令段等价: DEC CX JNZ label 3、过程调用指令 (1)调用指令CALL 一般格式:CALL sub ;sub为子程序的入口 4、中断指令 (1)INT n 执行类型n的中断服务程序,N=0~255 (七)处理器控制指令 1、标志位操作 (1)CF设置指令 CLC 0→CF STC 1→CF CMC CF变反 (2)DF设置指令 CLD 0→DF (串操作的指针移动方向从低到高) STD 1→DF (串操作的指针移动方向从高到低) (3)IF设置指令 CLI 0→IF (禁止INTR中断) STI 1→IF (开放INTR中断) 2、 HLT(halt) 执行HLT指令后,CPU进入暂停状态。 第三章 汇编语言及编程 计算机语言一般分为三种不同的层次:机器语言、汇编语言、高级语言。其中汇编语言,执行速度快、保密性好,可读性差,可移植性差,编程麻烦;高级语言,执行速度慢、保密性差、可读性好、可移植性好、编程简单。 一、伪指令 CPU指令与伪指令之间的区别: (1)CPU指令是给CPU的命令,在运行时由CPU执行,每条指令对应CPU的一种特定的操作。而伪指令是给汇编程序的命令,在汇编过程中由汇编程序进行处理。 (2)汇编以后,每条CPU指令产生一一对应的目标代码;而伪指令则不产生与之相应的目标代码。 1、数据定义伪指令 (1)数据定义伪指令的一般格式为: l[变量名] 伪指令 操作数[,操作数…] DB 用来定义字节(BYTE) DW 用来定义字(WORD) DD 用来定义双字(DWORD) (2)操作数的类型可以是: ①常数或常数表达式 l例如: DATA_BYTE DB 10,5,10H DATA_WORD DW 100H,100,-4 DATA_DW DD 2*30,0FFFBH 可以为字符串(定义字符串最好使用DB) l例如:char1 DB ‘AB’ 也可以为变量 还可以为?号操作符 例如:X DB 5,?,6 ?号只是为了给变量保留相应的存储单元,而不赋予变量某个确定的初值。 重复次数:N DUP(初值[,初值…]) l例如:ZERO DB 2 DUP(3,5) XYZ DB 2 DUP(0,2 DUP(1,3),5) 在伪操作的操作数字段中若使用$,则表示的是地址计数器的当前值。 2、补充内容: (1)类型 PTR 地址表达式 例如:MOV BYTE PTR [BX],12H INC BYTE PTR [BX] 注意:单操作数指令,当操作数为基址、变址、基+变的时候必须定义 3、符号定义伪指令 (1)EQU 格式:名字 EQU 表达式 EQU伪指令将表达式的值赋予一个名字,以后可用这个名字来代替上述表达式。 例:CONSTANT EQU 100 NEW_PORT EQU PORT_VAL+1 (2) =(等号) 与EQU类似,但允许重新定义 例: ┇ EMP=7 ;值为7 ┇ EMP=EMP+1 ;值为8 (3)LABEL LABEL伪指令的用途是定义标号或变量的类型 格式:名字 LABEL 类型 变量的类型可以是BYTE,WORD,DWORD。标号的类型可以是NEAR或FAR 4、段定义伪指令 与段有关的伪指令有: SEGMENT、ENDS、ASSUME、ORG (1)段定义伪指令的格式如下: 段名 SEGMENT [定位类型] [组合类型] [’类别’] ┇ 段名 ENDS SEGMENT和ENDS 这两个伪指令总是成对出现,二者前面的段名一致。二者之间的删节部分,对数据段、附加段及堆栈段,一般是符号、变量定义等伪指令。对于代码段则是指令及伪指令。此外,还必须明确段和段寄存器的关系,这可由ASSUME语句来实现。 (2)ASSUME 格式: ASSUME 段寄存器名:段名[,段寄存器名:段名[,…]] ASSUME伪指令告诉汇编程序,将某一个段寄存器设置为某一个逻辑段址,即明确指出源程序中逻辑段与物理段之间的关系。 (3)ORG 伪指令ORG规定了段内的起始地址或偏移地址,其格式为: ORG <表达式> 表达式的值即为段内的起始地址或偏移地址,从此地址起连续存放程序或数据。 5、汇编程序的一般结构 汇编语言源程序的语句结构一般由标号、操作码、操作数、注释4部分组成。如: 指令语句: 【标号:】 助记符(操作码) 【操作数】 【;注释】 伪指令语句: 【名字】 定义符(操作码) 【操作数】 【;注释】 DATA SEGMENT … DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA BGN: MOV AX ,DATA MOV DS,AX …. MOV AH,4CH INT 21H CODE ENDS END BGN 二、程序设计 1、 顺序程序的设计 例1 对于三个无符号数86H、34H、21H,编写86H*34H-21H的程序。 DATA SEGMENT NUM DB 86H,34H,21H RESULT DW ? DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX LEA SI,NUM LEA DI,RESULT MOV AL,[SI] MOV BL,[SI+1] MUL BL MOV BL,[SI+2] MOV BH,0 SUB AX,BX MOV [DI],AX MOV AH,4CH INT 21H CODE ENDS END START 2、 分支程序的设计 例2 将数据区中以字节变量BUFFER为首地址的100 个单元清0。 DATA SEGMENT BUFFER DB 100 DUP(?) COUNT DB 100 DATA ENDS STACK SEGMENT DW 32 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS: DATA,SS:STACK START:MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX MOV CL,COUNT LEA BX,BUFFER AGAIN:MOV [BX],0 INC BX CMP BX,COUNT JB AGAIN CODE ENDS END START 例3 在DATA1开始的80个单元中,存放80位同学的成绩(0—100),试统计>=90、80-90、 70-79、60-69以及<60的人数。结果存放在DATA2开始的单元中。 DATA SEGMENT DATA1 DB 80 DUP(?) DATA2 DB 5 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA START:MOV AX,DATA MOV DS,AX MOV CX,80 LEA SI,DATA1 LEA DI,DATA2 AGAIN: MOV AL,[SI] CMP AL,90 JC NEXT1 INC BYTE PTR[DI] JMP STO NEXT1:CMP AL,80 JC NEXT2 INC BYTE PTR[DI+1] JMP STO NEXT2:CMP AL,70 JC NEXT3 INC BYTE PTR[DI+2] JMP STO NEXT3:CMP AL,60 JC NEXT4 INC BYTE PTR[DI+3] JMP STO NEXT4:INC BYTE PTR[DI+4] STO:INC SI LOOP AGAIN MOV AH,4CH INT 21H CODE ENDS END START 3、 子程序调用 例5: 二进制数(0-F)转换成ASCII(‘0’-‘F’)的子程序。 BIN2ASC PROC ;要转换的数在AL的低四位 ;转换结果仍在AL中 CMP AL, 9 JA A2F ADD AL, 30H JMP DONE A2F: ADD AL, 37H DONE: RET BIN2ASC END
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传

当前位置:首页 > 通信科技 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:0574-28810668  投诉电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服