




已阅读5页,还剩45页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
成人函授教育汇编语言程序设计自学指导书适用计算机专业、 函授本(专)科黑龙江科技学院成教院目 录一、前 言.2二、自学进度表4三、各章节自学指导参考5第一章 汇编语言基础知识 .5第二章 8086指令系统 .7第三章 汇编语言程序格式.11第四章 汇编语言程序设计.18第五章 32位指令及其编程25第六章 汇编语言与C/C+的混合编程31四、汇编语言自测试题32一、前言1、本课程的性质和任务汇编语言程序设计是计算机及电子信息类有关专业一门重要的基础课程,是计算机专业学生必修的核心课程之一。汇编语言程序设计是培养学生直接使用计算机硬件资源能力的一门课程。它不仅能够帮助学生进一步理解计算机组成原理课程中的各种概念,而且还为其它课程如:操作系统、接口与通信技术和计算机控制技术等课程提供必要的预备知识。该课程在计算机学科课程设置中起着承上启下的作用。本课程的主要任务:(1)、了解计算机内部硬件结构及一般工作原理。(2)、掌握8086/8088指令系统和汇编语言程序格式。(3)、掌握汇编语言程序设计的方法和调试技术。(4)、熟悉BIOS和DOS中断及其简单的控制应用(5)、在实际应用的接口电路中,会编写简单的汇编语言程序。2、本课程的自学方法(1) 针对函授学员面授时间短,答疑不便,主要靠自学等特点,为了使学员自学过程有依据,因此编了自学指导书。课程教学重点环节,在课堂上主要是介绍各种常用指令格式和操作方法以及如何利用这些指令进行简单的程序设计。在每节授课过程中,首先提示本节应掌握的重点内容,然后在进一步讲解、做具体的说明。使学员能够真正掌握每一种指令的操作方法和应用。 (2) 按照汇编语言程序设计课程教学大纲的要求,课程的讲授将从基础知识、寻址方式、基本指令系统、汇编语言程序格式、汇编语言程序设计(顺序、分支和循环等),从简单到复杂,循序渐进,逐步深入。 (3) 学好一门课程,教师的引导固然十分重要,但主要靠学员的自身努力。课堂教学可以起到画龙点睛的作用,但只有不断练习,才能巩固、掌握课程的内容。因此,本课程要求学员积极独立完成所布置的习题。3、主要教学环节考试说明:(1) 在教学大纲和考核说明所规定的知识范围内命题。在教学知识范围之内,需要灵活运用才能够解决问题的试题不属于超纲。 (2) 试题的考察要求覆盖面广、区分度高。 (3) 试题兼顾各个能力层次,理解占40%,简单运用占40%,综合运用占20%。(4) 试题的难易程度和题量适当,按难易程度分为四个层次:容易占25%,较易占35%,较难占25%,难占15%。题量安排以平时能够独立完成作业者,使他们能在规定的考试时间内做完并有一定时间检查为原则。本课程使用的教材为:汇编语言程序设计钱晓捷 电子工业出版社 2000年1月出版。适用专业层次:专科、本科。在自学过程中,学员应根据自学进度表和个章节所规定的内容,要求来预习,要求重点部分能弄清楚,并能看懂例题,做习题,难点部分做一般性了解,待面授时由任课教师详解,自学内容应在面授该内容之前完成。二、自学进度表自学进度要求面授时数备注周次预习重点自学各章节内容自学时数1基础知识、8086寄存器组、8086的寻址方式第1章汇编语言基础知识第2章8086指令系统2.1、2.2442数据传送指令、算术运算指令位操作指令、串操作指令、控制移位指令第2章8086指令系统2.3、2.4、2.5、2.6、2.7、2.8773实验:汇编语言程序实验的基本方法和指令系统、汇编语言程序格式第3章汇编语言程序格式774顺序、分支、循环、子程序程序设计、宏结构设计、输入输出程序设计第4章汇编语言程序设计775实验:循环、分支程序设计,子程序设计,32位指令运行环境和扩展指令第5章32位指令及其编程776Turbo C嵌入汇编方式Turbo C模块连接方式第6章汇编语言与C/C+的混合编程447实验44三、各章节自学指导参考第一章汇编语言基础知识1、教学内容计算机的系统概述、数据表示、Intel 8086系列微处理器、PC微型计算机系统2、教学要求了解:微机及PC机系统的基本软硬件组成、掌握:数据的表示方法,有符号数的表示方法。掌握:熟悉汇编语言的概念和应用特点、复习掌握数据表达 3、习题与解答(1)数制转换降幂法:首先写出要转换的十进制数,其次写出所有小于此数的各位二进制权值,然后用要转换的十进制数减去与它最相近的二进制权值,如够减则减去并在相应位记以1;如果不够减则在相应位记0并跳过此位;如此不断反复,直到该数为0为止。除法:把要转换的十进制数的整数部分不断除以2,并记下余数,直到商为0为止;对于小数部分则应不断乘以2,并记下其整数部分,直到结果的小数部分为0为止。例1:N=117D 计算它对应二进制数形式【解答】方法一、降幂法小于N的二进制权为:64 32 16 8 4 2 1 计算过程:117-2 (a1) 53-2 (a1) 21-2 (a) (a) 5-2 (a) (a) 1-2 (a)所以N=117D=1110101B方法二、除法 过程: 117/2=58 (a)58/2=29 (a)29/2=14 (a)14/2=7 (a)7/2=3 (a)3/2=1 (a1)1/2=0 (a1)(2)数的补码表示正数的补码等于它本身负数的补码:负数 (n为位数)或者把该负数对应的正数的补码按位取反,末尾加1例2:机器字长16位,写出N=-117D的补码表示。【解答】+117D可以表示为 0000 0000 0111 0101按位取反后为 1111 1111 1000 1010末尾加1为 1111 1111 1000 1011用十六进制数表示为 F F 8 B即-117D的补码为 FF8BH(一) 计算机硬件由中央处理器CPU、存储器和输入/输出子系统组成,用系统总线把它们连接在一起。中央处理器CPU总线控制逻辑存储器接口接口大容量存储器I/O设备I/O子 系 统第二章8086指令系统1、教学内容:8086的寄存器组、8086的寻址方式、数据传送指令、算术运算指令、位操作类指令、串操作类指令、控制转移类指令、处理机控制类指令。2、教学要求:掌握8086的寄存器组和存储器组织,掌握8086的寻址方式,熟悉8086的基本参数、堆栈工作原理、指令对标志的影响、符号扩展的含义、压缩和非压缩BCD的格式,串操作寻址特点 掌握基本指令:MOVXCHGXLAT、PUSHPOP、LEA;CLCSTCSTC、CLDSTD;ADDADCINC、SUBSBBDECCMPNEG、CBWCWD;ANDORXORNOTTEST、SHLSHRSAR、ROLRORRCLRCR;REP、MOVSLODSSTOS;JMPJcc、JCXZLOOP、CALLRET、INT n 熟悉特色指令:INOUT ;CLISTI;MULIMUL、DIVIDIV、DAADAS、AAAAAS;CMPSSCAS;IRET;NOP 了解不常使用的指令:LAHFSAHFPUSHFPOPF、LDSLES;AAMAAD;REPZREPNZ;LOOPZLOOPNZ;INTO;LOCKHLTESCWAIT 掌握DOS、了解ROM-BIOS的字符字符串输入输出功能调用方法 掌握DEBUG调试程序的使用及调试指令和程序段的方法 3、习题与解答:(1)掌握七种寻址方式1、立即寻址方式2、寄存器寻址方式3、直接寻址方式4、寄存器间接寻址方式5、寄存器相对寻址方式6、基址变址寻址方式7、相对基址变址寻址方式例1:MOV AL,5 (立即寻址方式)指令执行后,(AL)=05HMOV AX,3064H指令执行后,(AX)=3064H 例2:MOV AX,BX (寄存器寻址方式)指令执行前(AX)=3064H,(BX)=1234H指令执行后,(AX)=1234H,(BX)保持不变例3:MOV AX,2000H (直接寻址方式)如(DS)=3000H,执行情况如图所示。OP5030 物理地址=16d*(DS)+2000H 执行结果(AX)=3050H32000例4: MOV AX,BX (寄存器间接寻址方式)如果(DS)=3000H,(BX)=2000H,则:物理地址=30000+2000=32000H(AX)=3050H例5MOV AX,COUNTSI (寄存器相对寻址方式)如果(DS)=3000H,(SI)=1000H,COUNT=1000H则:物理地址=30000+1000+1000=32000H(AX)=3050H例6 :MOV AX,BXDI (基址变址寻址方式)如果(DS)=2100H,(BX)=0158H,(DI)=10A5H(221FDH)=1234H则:物理地址=21000+0158+10A5=221FDH所以(AX)=1234H例7: MOV AX,MASKBXSI (相对基址变址寻址方式)如果:(DS)=3000H,(BX)=2000H,(SI)=1000H, MASK=0250H (33250H)=1234H则:物理地址=16d*(DS)+(BX)+(SI)+MASK =33250H(AX)=1234H例8:指出下列指令的错误所在MOV AH,BX MOV BX,SIMOV CS,AX CMP 15,BXMOV BP,AL MOV 20H,AHMOV AL,300H XCHG 60,BLXCHG AX,CL POP CS【解答】类型不一致 两个操作数不能都是存储单元CS不能作目的操作数 立即数不能为目的操作数类型不一致 立即数不能为目的操作数类型不一致 立即数不能为目的操作数类型不一致 POP指令中不允许使用CS(2)数据传送指令将4字节传送到AL寄存器 【解答】MOV AL,4将00FFH字传送CX寄存器【解答】MOV CX,00FFH将buffer1单元的数据传送到buffer2单元【解答】 MOV AX,buffer1 MOV buffer2,AX用字节输入指令从20h和21h端口输入一个数据【解答】IN AL,21H MOV AH,AL IN AL,20H(3)算术运算指令设X、Y、Z均为双精度数,他们分别存放在地址为X,X+2;Y,Y+2;Z,Z+2的存储单元中,存放时高位字在高地址中,低位字在低地址中,用汇编指令实现WX+Y+24-Z 并用W和W+2单元存放运算结果。【解答】 MOV AX,X MOV DX,DX+2 ADD AX,Y ADC DX,Y+2 ADD AX,24 ADC DX,0 SUB AX,Z SBB DX,Z+2 MOV W,AX MOV W+2,DX例:用汇编语言编写(V-(X*Y+Z-540)/X 其中X、Y、Z均为16位带符号数,已经分别装入X、Y、Z、V单元中,要求上式计算的结果的商存如AX,余数存如DX寄存器。【解答】 MOV AX,X IMUL Y MOV CX,AX MOV BX,DX MOV AX,Z CWD ADD CX,AX ADC BX,DX SUB CX,540 SBB BX,0 MOV AX,V CWD SUB AX,CX SBB DX,BX IDIV X第三章汇编语言程序格式1、 教学内容:汇编语言程序的开发,汇编语言程序的两种格式,汇编语言的参数、变量和标号,程序段的定义和属性,复杂的数据结构2、教学要求:掌握汇编语言语句格式,掌握简化段定义(或完整段定义)源程序格式。掌握常量表达、变量定义及应用,变量、标号和逻辑段的属性。 了解数值表达式、复杂数据结构和DOS的程序结构。 掌握基本伪指令和操作符:EQU;*;DBDWDD、?DUP;ORG$、OFFSETSEGPTR;.MODEL.STACK.DATA.CODEEND、SEGMENTENDS 了解不常使用伪指令和操作符:.RADIX;逻辑、移位和关系运算符;DFDQDT;EVENALIGN;THISSHORTTYPESIZEOFLENGTHOF;ASSUMEGROUP、.SEG.DOSSEG.ALPHA; 掌握汇编语言源程序的编辑、汇编、连接和调试的开发方法 3、习题与解答我们在学习8086汇编语言程序格式时要注意以下几点: 1):掌握汇编语言程序的编程格式和语句的四个组成部分。特别是构成操作数部分的两种操作符:分析操作符和合成操作符的作用和使用方法。 2):常用的符号定义伪指令、数据定义伪指令、段定义伪指令和过程定义伪指令的功能、格式和使用方法。 3):宏指令语句的定义,调用方法以及对应的宏扩展。 下面我们分别学习这几点:一:汇编语言程序的格式汇编语言的源程序是由各条语句构成的。每条语句可以由四项构成,格式如下: name operation operand ;comment其中名字项是一个符号。 操作项是一个操作码的助记符,它可以是指令、伪操作或宏指令名。 操作数项是由一个或多个表达式组成,它提供为执行所要求的操作而需要的信息。 注释项用来说明程序或语句的功能。;为识别注释项的开始。 上面四项中带方括号的两项可有可无。各项之间必须用“空格”(SPACE)或“横表”(TAB)符隔开。名字项(标号) 关于名字或标号项我们要注意以下几点: 1):标号在代码段中定义,后面跟冒号。在除代码段以外的其他段中定义时后面不跟冒号。 2):标号和一条指令的地址相联系,可作为JMP和CALL指令的操作地址。一般伪指令中的名字一般不作转移指令的操作数,但在间接寻址时可以作转移指令的操作数。名字可用来表示变量名、段名、过程名、符号名等。 3):标号或名字可任选或省略。 4):标号和变量均有三种属性:段值属性(SEGMENT)、段内的地址偏移量属性(OFFSET)和类型属性(TYPE).操作项 它可以是指令、伪操作或宏指令名。 1):指令就是前面我们所学近100条8086指令 2):伪指令或宏指令我们在后面再作详细的介绍。操作数 也就是程序要加工处理的对象。它可分为三类:常数、操作数和表达式。 1):常数:IBM-PC汇编语言允许有二进制、八进制、十进制、十六进制常数,分别用后缀B、O、D、H表示,还允许使用字符串常数,须用单引号括起来。 2):操作数:可以是常数操作数、寄存器操作数和存储器操作数。 3):表达式:在汇编语言中,表达式可以是常数、寄存器、标号、变量以及运算符组成的算式。 4):注释项:注释部分在语句后由“;”号作间隔,用来对语句的功能后某一程序段加以说明,使程序易读下面我们学习一些汇编语言常用的运算符:算术运算符 算术运算符有、*、/和MOD。其中MOD是取余。算术运算符可用于数字表达式或地址表达式中。 注意:当用于地址表达式中时,只有当其结果有明确的物理意义时其结果才有效。逻辑运算符 逻辑运算符有AND、OR、XOR和NOT。逻辑操作是按位操作的,它只能用于数字表达式中。关系运算符 关系运算符有EQ(相等)、NE(不等)、LT(小于)、GT(大于)、LE(小于或等于)、GE(大于或等于)六种. 注意:关系操作符的两个操作数必须都是数字或是同一段内的两个存储器地址,计算结果应为逻辑值:结果为真时,表示为0FFFFH,结果为假时,则表示为0。 例:MOV BX,(PORT_VAL LT 5)AND 20)OR(PORT_VAL GE 5)AND 30) 当POTE_VAL5时,汇编结果应该是: MOV BX,30数值回送操作符 它有TYPE、LENGTH、SIZE、OFFSET、ORG5种。这些操作符把一些特征或存储器地址的部分作为数值回送。下面我们分别学习以下它们。TYPE格式为:TYPE Variable或label如果是变量,则汇编语言将回送该变量以字节数表示的类型:DB为1,DW为2,DD为4,DQ为8,DT为10。如果是标号,则汇编程序将回送代表该标号类型的数值:NEAR为-1,FAR为-2。 LENGTH格式为:LENGTH Variable对于变量中使用DUP的情况,汇编程序将回送分配给该变量的单元数,对于其他情况回送1。例: ABC DW 100 DUP(0)对于指令: MOV CX,LENGTH ABC汇编程序将使其形成为: MOV CX,100 SIZE格式为:SIZE Variable汇编程序应回送分配给该变量的字节数。 注意:此值是LENGTH值和TYPE 值的乘积。 OFFSET格式为:OFFSET Variable或label汇编程序将回送变量或标号的偏移地址值。 SEG格式为:SEG Variable或label汇编程序将回送变量或标号的段地址。二:常用的伪指令 8086/8088宏汇编程序提供了许多伪指令来辅助用户编程。伪指令是说明性的指令,“伪”体现在汇编时不产生机器指令。下面我们学习一些常用的伪指令的格式和功能。符号定义伪指令 1)等值伪指令-EQU 格式为: EQU 功能是:给符号定义一个值,或定义为别的符号名,甚至是一条可执行的命令或表达式的值等。 例: CONST EQU 298 LAB EQU 10*3 PH EUQ PUSH 注意:EQU伪指令不能重新定义,即在同一源程序中,用EQU伪指令定义的符号,不能在重新赋予不同的值。 2)等号伪指令-= 格式为:= 功能:同EQU伪指令,但不同之处是可以对符号名进行重新定义。 例:SET=5 . . . SET=SET+1 注意:SET=5和SET EQU 5不允许在同一程序中同时定义使用。数据定义伪指令 格式为:DB DW DD DQ DT 功能为:数据定义伪指令可以把其后定义的数据存入指定的存储单元,或者只分配存储器空间而并不存入确定的数据。 DB、DW、DD、DQ、DT伪指令分别用来定义字节、字、双字、四字和五字,被说明的每个操作符分别占有一个字节、两个字节、四个字节、八个字节和十个字节。 关于此伪指令我们还要注意以下几点: 1):所定义的操作数可以是常数或表达式; 2):所定义的操作数可以是字符串; 3):所定义的操作数可以是?,表示保留存储空间,但不存入数据; 4):所定义的操作数可以用复制操作符来复制的某些操作数. 例: DATA DB 10,20 STR DB ABC DEF DW ?,288 ARRAR DB 30 DUP(?) ARRA DW 20 DUP(0) 段定义伪指令 存储器的物理地址是由段地址和偏移地址结合而成的。段定义伪指令使我们按段来组织程序和分配存储器。段定义的伪指令有SEGMENT、ENDS、ASSUME、ORG、PAGE、PUBLIC等。 1):SEGMENT和ENDS 功能为:把汇编语言源程序分成个逻辑段,并指出逻辑段的起始和终止地址。 格式为: SEGMENT 定位类型 组合类型 类别 . . . ENDS其中:1)段名可由用户自己命名. 2)定位类型、组合类型和类别是赋给段名的属性 3)号中的项可以省略. 定位类型的省缺值为PARA,表示该段必须从小段边界开始,即段地址的最低两个十六进制位必须为0。 组合类型的省缺值为NONE,表示本段与其他逻辑上下不发生关系,每段都有自己的基地址。 2):ASSUME 功能:为汇编程序提供了程序的段结构,并指明相应的逻辑段应通过对应的寄存器寻址。 格式:ASSUME :,过程定义伪指令 功能:过程定义伪指令又称子程序定义伪指令,用以在程序中定义一个子程序,以便提供主程序的调用。 格式: PROC NEAR/FAR . . . RET ENDS程序结束伪指令 功能:用来标志整个源程序的结束 格式:END 三:宏指令的定义和调用 宏指令语句是一种源程序级嵌式的程序语句。将程序中多次重复使用的源程序段,预先定义成所使用的宏指令语句,通常成为宏定义。在程序中可以用已定义的宏指令来代替着个程序段执行,称为宏调用。 宏定义中可以定义使用参数,并且宏定义可嵌套。 调用时,汇编程序先对宏指令语句进行宏扩展,即将宏定义中的程序段嵌入到宏指令语句处。 宏指令定义的好处:可以简化设计并且优化结构。宏指令定义的形式 格式: MACRO Par1,Par2, 语句1; 语句2; 语句n; ENDM 说明: 1)宏指令名是宏定义的名字,作为宏指令语句的操作符,其功能就是MACRO与ENDM之间语句的功能. 2)Par1,Par2是定义的形式参数,指令的操作码和操作数均为形式参数,在进行宏调用时,宏指令语句中的实在参数将对形式参数作一一对应的替换.形式参数并不是必须的。 3)MACRO称为宏定义伪指令,ENDM称为宏定义结束伪指令,它们之间的语句即程序段称为宏体.宏指令的调用形式 宏调用实际上就是调用执行已定义过的宏指令语句,其形式为: R1,R2, 说明: 1)宏指令名必须和宏定义中的宏指令名一致,最多可由1-8个字母数字组成.2)R1,R2,为实在参数,调用时其类型和顺序必须和宏定义中的形蚕一一对应。例:定义一个缓冲区,它包含有33H,34H,35H,和36H,四个字符,把这4个数据依次复制20次,存入接着的存储区,最后显示出复制结果。 【解答】 .model small .stack .data source db 33h,34h,35h,36h target db 80 dup(?) .code .startup mov ax,dsmov es,axcldmov si,offset sourcemov di,offset targetmov cx,80rep movsbmov si,0mov bx,offset targetagain:mov dl,bx+simov ah,2int 21hinc sicmp si,80jb again.exti 0end第四章汇编语言程序设计1、 教学内容:顺序程序设计,分之程序设计,循环程序设计,子程序设计,宏结构程序设计,模块化程序设计和输入输出程序设计。2、教学要求:掌握基本程序结构顺序结构、分支结构、循环结构、子程序和宏及其汇编语言程序设计方法 了解宏操作符、条件汇编和重复汇编、源程序包含、代码连接和子程序库等程序设计方法 掌握伪指令:PROCENDP、MACROENDM、LOCAL;INCLUDEPUBLICEXTERN 了解伪指令:REPEATFORFORC、IFxx 熟悉常见程序设计问题:多精度运算,查表(查代码、特定值等)、ASCII、BCD及十六进制数据间的代码转换;数据范围判断(09、AZ、az)、字母大小写转换;字符串传送、比较等操作、求最小最大值、数据求和、统计字符个数;子程序的寄存器和共享变量传递参数3、习题与解答 例:假设有两个字变量word1和word2,编写程序段来实现交换其值的功能。【解答】方法一:用汇编语言指令简单“直译”上面的交换过程。data1 segmentWord1 dw?Word2 dw?Temp dw?data1 endscode1 segmentmov ax,word1mov temp,ax ;以上二语句实现语句“TEMP=WORD1”mov ax,word2mov word1,ax ;以上二语句实现语句“WORD1=WORD2”mov ax,tempmov word2,ax ;以上二语句实现语句“WORD2=TEMP”code1 ends这种方法虽然完成了功能,但很显然不能充分地利用汇编语言的特点,程序的效率很低。方法二:用汇编语言的指令特点直接编程。data1 segmentWord1 dw?Word2 dw?data1 endscode1 segmentmov ax,word1xchg ax,word2mov word1,axcode ends该方法充分利用了汇编语言的特点,不仅省去了中间变量temp的定义,而且程序的效率也大大的提高。例:设有3个字变量X、Y、Z,初值分别为5、6、7,试求出三者之和,并存入字变量W中。【解答】分析:在数据段中定义4个变量X、Y、Z和W,并按要求初始化;代码段主体依次相加,最后将结果存入W中。;LT401.ASM.model small.stack 256.datax dw 5y dw 6z dw 7w dw ?.code.startupmov ax,xadd ax,yadc ax,zmov w,ax.exit 0end例:判断方程ax是否有实数根,若有实数根则将字节变量tag置1,否则置0(a,b,c均为字节变量,表达-127+127的数据)。【解答】分析:二元一次方程有根的条件是:b.依据题意,首先计算出b和4ac,然后比较两者的大小,根据比较的结果分别给tag赋不同的初值。.model small.stack 256.data_a db ?_b db ?_c db ?tag db ?.code.startupmov al,_bimul almov bx,axmov al,_aimul _cmov cx,4imul cxcmp bx,axjge yesmov tag,0jmp doneyes: mov tag,1done: . exit 0end上面的这道例题还可以用条件控制伪指令实现有根判断,程序如下:.model small.stack 256.data_a sbyte ?_b sbyte ?_c sbyte ?tag byte ?.code.startupmov al,_bimul almov bx,ax ;bx中为bmov al,_aimul _cmov cx,4imul cx ;ax中为4 ac.if sword ptr bx =ax ;比较二者大小mov tag,0 ;第一分支体:条件不满足,tag0.elsemov tag,1;第二分支体:条件满足,tag1.endif.exit 0end例:计算1100数字之和,并将结果寸入字变量SUM中。【解答】分析:程序要求SUM=1+2+3+100,这是一个简单的记数循环,完成100次简单的加法。我们编写一个100次的记数循环结构;循环开始前将被加数清0,加数置1,循环体内完成一次累加,每次加数递增1。LOOP指令要求循环次数预置给CX,每次循环CX递减1,这样,循环体内加数就可以直接用循环控制变量CX,简化循环体,完成与题目等价的1001的累加。.model small.stack 256.datasum dw? .code.startupxor ax,ax;被加数清0mov cx,100again: add ax,cx ;从100,99,98。1倒序累加loop againmov sum,ax ;将累加和送入指定的单元.exit 0end例:根据当前计算机的时间和日期,显示上午(AM)或下午(PM)以及所在的季节。【解答】:data1 segmentmsg db “time”Ampm db “am”,13,10 db “season:$”winter db “winter$”spring db “spring$”summer db “summer$autumn db “autumn$”data1 endscode1 segmentmov ah,21h ;取当前系统的时间int 21hif ch12 ;下午时间 mov Ampm,p ;为显示PM做准备endifmov dx,offset msgmov ah,09hint 21h ;显示字符串msg,到“$”为止mov ah,2ahint 21h ;取当前系统日期if(dh=12)|(dh=3)&(dh=6)&|(dh9) ;判断是否为6月,7月,8月 mov dx,offset summerelse ;判断是否为9月,10月,11月mov dx,offset autumendifmov ah,09h ;显示季度的名称int 21hend子程序设计子程序在汇编语言中也被称为过程,它相当于高级语言中的过程和函数。每个子程序是具有一个唯一的过程名的程序段。过程定义有一对过程伪指令PROC和ENDP来完成,其格式为:过程名 PROCNEAR/FAR 过程体过程名 ENDP所以,过程常具有类似下列格式:subname proc ;具有缺省属性的subname过程push ax ;保护寄存器,顺序压入堆栈push bxpush cx;过程体pop cx;恢复寄存器,逆序弹出堆栈pop bxpop axret;过程返回subname endp;过程结束第五章32位指令及其编程1、 教学内容:32位指令运行环境,32位扩展指令,32位指令的程序设计,80386新增指令,80486新增指令。2、教学要求:熟悉32位80x86CPU的3种工作方式和32位寄存器组,掌握32位寻址方式 理解16位指令如何实现32位扩展,熟悉常用16位指令的32位扩展功能及应用,其中新增指令:PUSHAPOPA、MOVSXMOVZX、INSOUTS、JECXZ 掌握32位指令编程方法 了解常用的32位新增指令:BTBTCBTRBTS、SETcc、BSWAPXADDCMPXCHG、CPUID、CMOVcc 3、习题与解答32位指令的操作与前面讲解的8086的一些指令的操作基本上是相同的,功能上也是基本相同的,所以,只要我们学员能够认真地把前面所学的8086中的一些基本操作学好,那么对于32位指令的学习和32位指令的编程就非常容易了。他们在寻址方式、数据传送指令、算术运算指令、位操作指令、串操作指令、控制转移指令和处理机控制类指令几乎是相同的,在这里我们就不再做详细的说明了。我们通过几个简单的实例与前面所学的8086进行一下比较,让学员能够更清楚地了解32位指令以及32位指令的编程。学习一种的汇编语言,必须了解这种 CPU 的寄存器、寻址方式以及各种指令。我们就先从寄存器开始着手吧。INTEL X86 常用寄存器通用寄存器 段寄存器AH/AL AX (EAX) 累加器 CS 代码段BH/BL BX (EBX) 基址 DS 数据段CH/CL CX (ECX) 计数器 SS 堆栈段DH/DL DX (EDX) 数据 ES 附加段(FS) 386 新增的段寄存器(Exx) 为 386 新增的 32 位寄存器 (GS) 386 新增的段寄存器指针寄存器 堆栈寄存器SI (ESI) 源索引指针 SP (ESP) 栈指针DI (EDI) 目的索引指针 BP (EBP) 基址指针IP 指令指针状态寄存器|11|10|F|E|D|C|B|A|9|8|7|6|5|4|3|2|1|0| | | | | | | | | | | | | | | | | +- CF Carry Flag| | | | | | | | | | | | | | | | +- 1| | | | | | | | | | | | | | | +- PF Parity Flag| | | | | | | | | | | | | | +- 0| | | | | | | | | | | | | +- AF Auxiliary Flag| | | | | | | | | | | | +- 0| | | | | | | | | | | +- ZF Zero Flag| | | | | | | | | | +- SF Sign Flag| | | | | | | | | +- TF Trap Flag (Single Step)| | | | | | | | +- IF Interrupt Flag| | | | | | | +- DF Direction Flag| | | | | | +- OF Overflow flag| | | | +- IOPL I/O Privilege Level (286+ only)| | | +- NT Nested Task Flag (286+ only)| | +- 0| +- RF Resume Flag (386+ only)+- VM Virtual Mode Flag (386+ only)怎么样,看起来大半部分都应该是我们以前很熟的了吧。首先必须强调的是,在用 32 位汇编语言编程的时候,所有的地址偏移量都是 32 位的,在寻址时千万不要还用原来的 16 位方式。对于通用寄存器来说,多了种形如 (Exx) 的 32 位寄存器,它的低 16 位内容就是原来的 16 位寄存器,而多出的高 16 位的内容,则只能通过使用 32 位寄存器来访问。再以指针寄存器为例,在寻址时一定要用 ESI、EDI、EBP 等等,必须要把以前那种 mov ax,si 之类的指令改为 mov ax,ESI。从 386 开始,多出了 FS、GS 这两个新的段寄存器。由于我们学习的目的是为了今后写在线汇编,所以很多繁琐的问题都不会直接遇到。为了能更快地投入实际运用,这里就不打算去讲述保护模式的细节了.这个简单的结论就是:你在 VC 中写在线汇编时,尽量不要去碰段寄存器!下面将开始讲述 INTEL X86 的 32 位偏移地址构成方式。这里给出关于 80386 寻址模式的一张列表:基地址 + (变址 X 比例因子) + 偏移量|无 | |无 |EAX| |EAX|EBX| |EBX| |1|ECX| |ECX| |2| | 无 |EDX| + |EDX| X |4| + | 8位|ESP| |-| |8| |32位|EBP| |EBP|ESI| |ESI|EDI| |EDI|其中,“-”表示 ESP 不能被用作变址寄存器在 80386 寻址时,其默认的段寄存器取决于所选择的基地址寄存器。如果基地址寄存器是 ESP 或者 EBP,则默认的段寄存器是 SS。对于别的基地址寄存器的选择,包括无基地址寄存器,DS 仍然是其默认的段寄存器.基地址寄存器 默认的段寄存器BP or SP SSSI or DI DSDI strings ESSI strings DS了解了寄存器和寻址方式以后,我们就可以使用过去已经知道的指令开始编程了。但 INTEL 在 386 以后新增了不少指令,虽然这里我不可能全部列出来,但可以稍微看看其中比较常用的几条。BSWAP - 字节交换 (486+)颠倒 32 位寄存器的字节排列顺序。CDQ - 双字转换成四字 (386+)把 EAX 中的符号数按符号扩展为 EDX:EAX,即把 EAX 中的第 32 位赋予
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 海域使用权租赁与海洋科研合作合同范本
- 水性瓷砖施工与环保评估合同
- 老字号品牌旗舰店租赁及历史传承保护合同
- 公交车辆驾驶员劳动合同及安全行车教育与保障协议
- 2025公务员市考面试题及答案
- 2025年湖北银行考试试题及答案
- 电竞专业考试试题及答案
- 会计专业笔试题目及答案
- 特殊职位专业考试题及答案
- 双重预防管理体系
- 2025贵州贵安城市置业开发投资有限公司招聘32人考试参考题库及答案解析
- 2025全国科普日科普知识竞赛题库及答案
- 【课件】角的概念+课件+2025-2026学年人教版(2024)七年+数学级上册+
- 2025企业劳动合同范本新版
- 2025年防雷检测专业技术人员能力认定考试题库及答案
- 美发裁剪理论知识培训课件
- 舞蹈老师自我介绍课件
- 2025年吉林省教育系统校级后备干部选拔考试题及答案
- 社区安全知识培训资料课件
- 徐学义基础地质调查课件
- 2025主题教育应知应会知识题库及答案
评论
0/150
提交评论