第4章汇编语言程序设计PPT课件

上传人:cn****1 文档编号:588298509 上传时间:2024-09-07 格式:PPT 页数:69 大小:305KB
返回 下载 相关 举报
第4章汇编语言程序设计PPT课件_第1页
第1页 / 共69页
第4章汇编语言程序设计PPT课件_第2页
第2页 / 共69页
第4章汇编语言程序设计PPT课件_第3页
第3页 / 共69页
第4章汇编语言程序设计PPT课件_第4页
第4页 / 共69页
第4章汇编语言程序设计PPT课件_第5页
第5页 / 共69页
点击查看更多>>
资源描述

《第4章汇编语言程序设计PPT课件》由会员分享,可在线阅读,更多相关《第4章汇编语言程序设计PPT课件(69页珍藏版)》请在金锄头文库上搜索。

1、第第4章章 汇编语言程序设计汇编语言程序设计 主要内容1 1 MASMMASM宏汇编语言结构宏汇编语言结构2 2 MASMMASM汇编语言数据、表达式和运算符汇编语言数据、表达式和运算符3 3 伪指令伪指令 4 4 程序设计程序设计 5 5 DOSDOS功能调用功能调用 6 6 实用程序设计举例实用程序设计举例 1一、一、MASM MASM 汇编语句结构汇编语句结构 MASM 有两种基本语句,它们是指令语句和指示语句(又称伪指令)n指令语句(Instruction statements) 指令语句又称可执行语句,它要求 CPU执行某种操作。 指令语句的格式为: 符号: 指令助记符 操作数 ;注

2、释一条指令一条语句可分为4个字段,其中方括号中的字段为可选项。 .2指示语句(指示语句(pseudo instruction statements)pseudo instruction statements) 指示词句又称伪指令,它不要求指示词句又称伪指令,它不要求CPUCPU执行某种操执行某种操作,汇编时也不产生对应的机器代码,而仅仅告诉作,汇编时也不产生对应的机器代码,而仅仅告诉汇编程序,对它后面的指令语句和操作数应该如何汇编程序,对它后面的指令语句和操作数应该如何产生机器目标代码。产生机器目标代码。伪指令的格式为:伪指令的格式为: 名字名字 伪指令定义符号伪指令定义符号 操作数操作数 ;

3、 ;注释注释 区别:伪指令名字后无冒号区别:伪指令名字后无冒号3二、 MASM 汇编语言数据、汇编语言数据、 表达式和运算符表达式和运算符常数 常数是没有任何属性的纯数值。 常数分为两种类型:数值型常数和字符串型常数。 4数值型常数数值型常数1.1.二进制数二进制数: :以字母以字母B B结尾结尾, ,如如0101110101011101B B2.2.八进制数八进制数: :以字母以字母QQ或或OO结尾结尾, ,如如723723Q,211QQ,211Q。3.3.十进制数:以字母十进制数:以字母D(D(或省略或省略) )结尾,如结尾,如19951995D,3508D,3508。4.4.十六进制数:

4、以字母十六进制数:以字母H H结尾,如结尾,如3 3A40HA40H,8BH8BH。字符型常数字符型常数用单引号括起来的字符串。如用单引号括起来的字符串。如 ABCDABCD,$123456$123456等。等。每个字符在机内以每个字符在机内以ASCIIASCII码存放,例如码存放,例如 AA,再内存为再内存为4141H H。5变量 变量用来定义存放在存储器单元中的数据。变量用来定义存放在存储器单元中的数据。其三重属性为:其三重属性为: 段段属性(属性(SEGSEG) 偏移地址偏移地址属性(属性(OFFSETOFFSET) 类型类型属性(属性(TYPETYPE)例:例:DATA SEGMENT

5、 DATA SEGMENT 对变量的操作:对变量的操作:变量名变量名 FIRST DB 5AH LEA AXFIRST DB 5AH LEA AX,FIRSTFIRST SECOND DW 1122H MOV AX SECOND DW 1122H MOV AX,SECONDSECOND DATA ENDS MOV AX DATA ENDS MOV AX,FIRSTDIFIRSTDI变量名:存放数据存储单元的符号地址变量名:存放数据存储单元的符号地址6标号: 给指令语句所在地址取的名字给指令语句所在地址取的名字 段段属性(属性(SEGSEG) 偏移地址偏移地址属性(属性(OFFSETOFFSET

6、) 距离距离属性(属性(DistanceDistance) 例:例: (隐含为隐含为NEARNEAR) LOOPLOOP:MOV AXMOV AX,00000000 JMP LOOP JMP LOOP7三、 伪指令伪指令(指示语句) 指示性语句又称伪指令,它没有对应的机器指指示性语句又称伪指令,它没有对应的机器指令,不由令,不由CPUCPU执行,而是在汇编程序汇编时识别,执行,而是在汇编程序汇编时识别,用于说明用于说明CPUCPU的类型、段结构、源程序起止信息的类型、段结构、源程序起止信息和段内存的安排等。和段内存的安排等。 MASMMASM的伪指令可分为变量定义语句、标号定的伪指令可分为变量

7、定义语句、标号定义语句、段定义语句、段分配语句、过程定义语义语句、段定义语句、段分配语句、过程定义语句、群定义语句、结构定义语句、记录定义语句句、群定义语句、结构定义语句、记录定义语句等。等。8变量定义语句变量定义语句 变量定义语句用来定义字节、字或双字变量,变变量定义语句用来定义字节、字或双字变量,变量定义语句有两种不同的格式。量定义语句有两种不同的格式。 格式一格式一 变量名变量名 DB / DW / DD / DF / DQ / DT DB / DW / DD / DF / DQ / DT 表达式表达式 功能:为变量分配功能:为变量分配 1 1 个字节个字节/ /字字/ /双字双字/ /

8、长字长字/ /四四 字字/ /十字节的存储单元,并赋值。十字节的存储单元,并赋值。具体形式:具体形式: 9(1)用数值表达式定义变量。例如:用数值表达式定义变量。例如:K1 DB 5AH ;将5AH赋给字节变量K1K2 DW 2354H ;将2354H赋给字变量K2K3 DD 2A00 4455H ;将2A00 4455H赋给双字变量K35AH54H23H55H44H00H2AHK1K2K310(2)用字符串定义变量。例如:ONE DB HOW ARE YOU ;将“HOW ARE YOU” 字符串赋给变量ONE。TWO DW OK ;将OK字符串赋给变 量TWOHOW KOONETWO11(

9、3)存放结果时,用(?)定义不确定值的变量ABOV DB ? ;定义变量ABOV为不确定值的字节变量BLOW DW ? ;定义变量BLOW为不确定值的字变量CLER DD ? ;定义变量BLOW为不确定值的双字变量(4)用数组表达式定义变量。例如:A1 DB 00H,11H,22H,33HA2 DW 3456H,1025,25*25,1000/3,10A0H例:MOV AL,A13 ;(AL)=33H MOV AX,A21 ;(AX)=102512 格式二格式二 格式格式 2 2 用于定义重复变量,其格式为:用于定义重复变量,其格式为: DB DB DW DW DD DD DF DF DQ D

10、Q DT DT例:TAB1 DB 10 DUP(0) TAB2 DW 2 DUP(?) TAB3 DB 4 DUP(1,2 DUP(50H)变变量量名名n DUP(n DUP(表达式)表达式)13符号定义语句符号定义语句 等值语句(等值语句(EQUEQU) 格式:符号格式:符号 EQU EQU 表达式表达式 功能:将表达式的值赋给功能:将表达式的值赋给EQUEQU左边的符号。表左边的符号。表达式可以是常数、变量、标号、数值或地址表达式。达式可以是常数、变量、标号、数值或地址表达式。 等号语句等号语句 格式:符号格式:符号 = = 表达式表达式 等号语句(等号语句(= =)与)与EQUEQU语句

11、有同样的功能,语句有同样的功能,区别区别在于等号语句定义的符号允许重新定义在于等号语句定义的符号允许重新定义,使用更加方,使用更加方便灵活。便灵活。14例1: ACOS EQU 1250HCOUNT EQU 100BUF EQU ACOS+1000HMOV CL,COUNT例2:ONE =100COUNT =100A=ONES=COUNT+100A=A+10015段定义指令段定义指令 在汇编程序设计中,需要将存储器分成若干段,在汇编程序设计中,需要将存储器分成若干段,CPUCPU访问存储器时,凭籍段寄存器对各个段进行访访问存储器时,凭籍段寄存器对各个段进行访问。通常用段定义语句(问。通常用段定

12、义语句(SEGMENT/ENDSSEGMENT/ENDS)来定来定义各种类型的逻辑段。义各种类型的逻辑段。 (一)完整段定义伪指令(一)完整段定义伪指令 1. 1. 段定义语句段定义语句 16 格式:格式: 段名段名 SEGMENTSEGMENT定位类型定位类型 , 组合类型组合类型 , 字长选字长选 择择 , 类别类别 (段体)(段体) 段名段名 ENDSENDS 段名:自己选定,前后一致段名:自己选定,前后一致定位类型:定位类型: PAGE PAGE:段的首地址后两位为段的首地址后两位为0000H H,页边界开始页边界开始 PARA PARA:(:(隐含)段的首地址后隐含)段的首地址后1

13、1位为位为0 0H H,节边界节边界DWORDDWORD:4 4的倍数的倍数WORDWORD: 偶地址偶地址 BYTEBYTE:任一字节任一字节17组合类型:NONE:(隐含)与同名段不连接,独立存在。STACK:表明该段为堆栈段,不可缺省。AT 表达式:表示本段可定义在表达式指示的节边界上。例:MCODE SEGMENT AT 2050H则该段的首地址为20500H。字长选择:USE16:段字长为16位,最大段长为64KBUSE32:段字长为32位,最大段长为4GB分类名:用单引号括起,分类名相同的逻辑段存放在连续存储空间。18 2. 2. 段分配语句(段分配语句(ASSUMEASSUME)

14、 段分配语句用来完成段的分配,说明当前哪些逻辑段分配语句用来完成段的分配,说明当前哪些逻辑段被分别定义为代码段、数据段、堆栈段和附加段。段被分别定义为代码段、数据段、堆栈段和附加段。 格式:格式:ASSUME ASSUME 段寄存器:段名,段寄存器:段名, 段寄存器:段名段寄存器:段名 功能:说明源程序中定义的段由哪个段寄存器去寻址。段功能:说明源程序中定义的段由哪个段寄存器去寻址。段 寄存器可以是寄存器可以是CSCS,SSSS,DSDS,ESES,FSFS或或GSGS。3. 3. 段寄存器的装入段寄存器的装入 ASSUMEASSUME语句只建立当段和段寄存器之间的联系,但语句只建立当段和段寄

15、存器之间的联系,但ASSUMEASSUME语句不能将各段的段基值装入各个段寄存器,语句不能将各段的段基值装入各个段寄存器,段基址的装入是用程序的办法。段基址的装入是用程序的办法。 19DSDS、ESES、FSFS和和GSGS的装入的装入 DSDS、ESES、FSFS和和GSGS不能用立即数寻址方式直接装入,不能用立即数寻址方式直接装入,段基值需先送入通用寄存器,再传送给段寄存器。段基值需先送入通用寄存器,再传送给段寄存器。 例:例:MOV AXMOV AX,DATADATA MOV DS MOV DS,AXAXSSSS及及SPSP的装入:的装入:在段定义伪指令中,选用在段定义伪指令中,选用 “

16、 “STACK”STACK”参数项,在参数项,在ASSUMEASSUME语句中,把堆栈段分配给语句中,把堆栈段分配给SSSS,则则SSSS和和SPSP自自动装入。动装入。如未使用如未使用“ “STACK”STACK”参数项,则用程序实现参数项,则用程序实现SSSS和和SPSP的的装入装入 20例: STACK2 SEGMENT DW 40 DUP(?) TOP LABEL WORD STACK2 ENDS CODE SEGMENT ASSUME CS:CODE SS:STACK2 START: MOV AX,STACK2 MOV SS,AX MOV SP,OFFSET TOP CODE END

17、S END START4. 4. CSCS的装入的装入 :由起始标号确定:由起始标号确定CSCS和和IPIP21例:DATA SEGMENT BCDBUF DB 22H DATA ENDS EXTRA SEGMENT BUFF DB 20 DUP(00H) EXTRA ENDS STACK SEGMENT STACK SBUFF DB 200 DUP(?) STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:EXTRA,SS:STACKSTART: MOV AX,DATA MOV DS,AX MOV AX,EXTRA MOV ES,AX CODE

18、 ENDS END START 22 (二)简化段定义伪指令(二)简化段定义伪指令1. 1. 段次序语句(段次序语句(DOSSEGDOSSEG) 格式:格式:DOSSEGDOSSEG 功能:各段在内存的顺序按功能:各段在内存的顺序按DOSDOS段次序预定排列。段次序预定排列。 2. 2. 内存模式语句(内存模式语句(. .MODELMODEL) 格式:格式:MODEL MODEL 模式类型模式类型. .高级语言高级语言 功能:指定数据和代码允许使用的长度。功能:指定数据和代码允许使用的长度。说明:说明: 高级语言高级语言 是可选项,可用是可选项,可用C C、BASICBASIC、FORTRAN

19、FORTRAN、程序中凡数据或代码的长度不大于程序中凡数据或代码的长度不大于64KB64KB时为近程,时为近程,否则为远程。否则为远程。23简化段定义 DOSSEGMODEL SMALLSTACK DB 200HDATA BCDBUF DB 12HCODESTART: MOV AX,DATA MOV DS,AX END START24过程定义伪指令(过程定义伪指令(PROC/ENDP) 在程序设计中,常把具有一定功能的程序段设计成一个子程序,又称为过程。 过程定义伪指令的格式如下:过程名 PROC(NEAR/FAR)RET过程名 ENDP25 1. LABEL 伪指令: 用于给已定义的变量起一

20、个别名。 LABEL 伪指令格式如下:名称LABEL类型/距离 2. (1)定位伪指令 定位伪指令的格式是:ORG 表达式 (2)当前位置计数器 在汇编程序时,用 $ 表示当前的偏移地址值。 DATA SEGMENT ST DB ABCDEFGH COUNT EQU $-ST DATA ENDS26四四 、程序设计概述、程序设计概述 与高级语言程序设计类似,在用汇编语言进行程序设计时,同样应按以下步骤进行。 1.分析问题,建立数学模型 2.确定算法 3.编制程序流程图 4.编制程序 5.调试程序27一个源程序的基本格式如下:DATA SEGMENT DATA ENDSEXTRA SEGEMNT

21、 EXTRA ENDSSTACK1 SEGMENT PARA STACK STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA ASSUME SS:STACK1,ES:EXTRA;存放数据项的数据段;存放数据项的附加段;堆栈段28START: MOV AX,DATA MOV DS,AX MOV AX,EXTRA MOV ES,AX MOV AH,4CH INT 21HCODE ENDS END START (核心程序段);DD装入段基址;ES装入段基址;系统功能调用;返回操作系统29(一一)、 顺序结构程序顺序结构程序例1 编制程序,求下列公式中的Z值

22、,并将结果存放到RESULT单元中。 =Z(X+Y)*8-X2 设X,Y的值分别存放在VARX,VARY单元中,运算结果不超过16位。解:(1)存储单元 RESULT 用来存放结果,VARX 和 VARY 放 X、Y的值。寄存器 DX 放中间运算结果,左移 1 位相当于乘 2,右移 1 位相当于除 2,所以可以用左移 3 位得到乘以 8 的结果。 (2)程序流程图和程序如下:30开始预置段寄存器DX XDX X+YDX右移得(X+Y)*8-X)/2RESULT DX结束DX左移3次(X+Y)*8DX (DX)-X31DATA SEGMENTVARX DW 0006HVARY DW 0007HR

23、ESUL DW ?DATA ENDSSACK1 SEGMENT PARA STACK DW 100H DUP(?)SACK1 ENDSCOSEG SEGMENT ASSUME CS:COSEG ASSUME DS:DATA ASSUME SS:STACK1 32 START: MOV AX , DATA MOV DS , AX MOV DX,VARX ;DX X ADD DX,VARY ;DX X+Y MOV CL , 3 SAL DX,CL ;DX (X+Y)*8 SUB DX,VARX ;DX (X+Y)*8-X SAR DX,1 ;DX ( (X+Y)*8-X )/2 MOV RESUL

24、T,DX MOV AH,4CH ;系统功能调用,返回操作系统 INT 21HCOSEG ENDS END START33(二二)、分支程序、分支程序条件转移:JX 目标用于程序需要进行分别处理的情况。主要使用转移指令。转移指令分为无条件转移指令无条件转移指令 和条件转移指令条件转移指令。无条件转移指令: JMP 目标在进行分支程序设计时,通常用比较、测试,或算术运算、逻辑运算影响标志位,然后选择转移指令。34例1. 符号函数 y= 1 x0 0 x=0 -1 x 0X=0X 0AL=0AL -1AL 0AL 1 NYNYY AL结束36DATA SEGMENT XX DB x YY DB ?D

25、ATA ENDSCODE SEGMENT ASSUME CS:CODE, DS:DATASTART: MOV AX,DATA MOV DS, AX MOV AL, XX CMP AL, 0 ;x-0建标志位 JGE BIGR ;x 0转移 MOV AL,-1 ;x0转移 MOV AL, 0 ;x=0 JMP JUS2JUS1: MOV AL, 1 ;x0JUS2: MOV YY, AL MOV AH, 4CH INT 21HCODE ENDS END START38(三三)、循环程序循环程序 一个循环程序通常由以下四部分组成: 初始化部分初始化部分 循环体循环体 修改部分修改部分 控制部分控制

26、部分按结构又分为先判断后执行和先执行后判断循环程序常用指令:LOOP, LOOPE, LOOPNE, JCXZ39例1. 计算Y= 解:定义数组名TABL存放 a1a20;和存放于单元YY中。中间结果存于寄存器AX中。BX寄存器为地址指针,CX寄存器作计数器。程序如下DATA SEGMENTTABL DW a1,a2,a10 DW a11,a12,a20 设 a1,a2,a20是一组无符号十六位二进制数,并设其和不大于2个字节 。40YY DW ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX M

27、OV AX,0 MOV BX,OFFSET TABL MOV CX,20 ;LOP: ADD AX,BX ; 循环体初始化41 INC BX INC BX DEC CX ; JNZ LOP ;控制部分 MOV YY,AX MOV AH,4CH INT 21HCODE ENDS END START修改部分LOOP LOP42(A).循环的基本结构循环的基本结构1.先执行,后判断结构流程图如右:入口初始化部分循环体修改部分循环结束?出口YN43例2. 编程统计数据块中正数的个数,并将其送 RS单元中。解:数据块定义为 D1,RS单元存放正数的个数,数据块长度用 COUNT表示。BX作地址指针,CX

28、作计数器,DX记录正数的个数,程序流程图如下所示:44START预置段RBX D1 DX 0 CX COUNTBX0?DX DX+1BX BX+1 CX CX-1CX=0?RS (DX)ENDNYNYDATA SEGMENT D1 DB -1,-3,5,7,-9,-6RS DW ?COUNT EQU $-D1DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AXMOV BX,OFFSET D1MOV CX,COUNTMOV DX,045 MOV RS,DX MOV AH,4CH INT 21HCODE E

29、NDS END STARTLOOP LOP1LOP1: MOV AL,BX CMP AL,0JLE JUSTIJUSTI: INC BX DEC CX JNZ LOP1INC DX462.先判断,后执行结构流程图如右入口初始化部分循环结束?循环体修改部分出口YN47例3. AX寄存器中有一个 16位的二进制数,编程统计其中值为 1的位的个数,并将结果存于CX中。解: 由于AX有可能为 0,若AX=0则不必再往下作统计工作,因此可采用先判断,后执行结构。流程图如右:48程序段如下:STOP: HLTSTARTCX 0AX=0?AX左移CF=0?CX CX+1ENDYNYNMOV CX,0LOP:

30、 AND AX,AX ;建标志位 JZ STOP ;AX=0停机SAL AX,1JNC NODNOD: JMP LOPINC CX49(B).循环控制方式循环控制方式1.计数控制用于计数次数已知的情况,可采用正计数或倒计数法。如例12.条件控制当计数次数无法确定,但循环次数与某些条件有关,并且条件可检测时,可采用条件控制,例如检测,比较或判断等形式。50例5. 在一串字符串中查找某一关键字#,若查到,记下存放该关键字单元的偏移地址,若找不到用 -1 作标记。解:设串变量名 STRING,关键字单元CHAR,关键字单元的偏移地址放 FLAG单元。寄存器 SI为字符串的地址指针,CX为字符串长度,

31、AL用于放关键字#。51STARTSI STRING的EA CX 串长度 AL #SI=AL?SI=SI+1CX-1=0?FLAG -1ENDFLAG SIYNYN还可用字符串指令实现52(C).多重循环多重循环循环体中又有循环称多重循环。 开始循环控制条件循环体结束循环控制条件循环体53 程序设计过程中常常把多次引用的相同程序段编成一个独立的程序段,当需要只执行这个程序段时,可以用调用指令调用它。具有这种功能的程序段称为过程或子程序。(A) 子程序的设计方法子程序的设计方法1 适合编成子程序的程序有以下两大类 (1)程序需要反复使用,这类程序编成子程序可避免重复编写程序,并节省大量存储空间。

32、 (2)程序具有通用性,这类程序大家都要用到,如键盘管理程序,磁盘读写程序,标准函数程序等。编成子程序后便于用户共享。(四四)、子程序子程序54下面是一个子程序说明部分的例子:;子程序;将两位十进制数()转换成二进制数;寄存器BX传递参数;入口参数:AL寄存器存放十进制数;出口参数:CL寄存器存放转换后的二进制数;执行时间0.062 编写子程序文件 为了使用户使用方便,子程序应当以文件形式编写。552.子程序程序部分子程序程序部分子程序用过程定义伪指令(PROC/ENDP)定义,编写格式如下:子程序名子程序名 PROC RET 子程序名子程序名 ENDP(B)子程序使用中的问题)子程序使用中的

33、问题 1.子程序的调用和返回 主程序调用子程序 是通过CALL指令来实现,子程序执行后,通过RET指令返回主程序562.调用子程序时寄存器及所用存储单元内容的保护。 如果子程序中要用到某些寄存器或存储单元时,为了不破坏原有的信息,要将寄存器或存储单元的原有内容压栈保护或存入子程序不用的寄存器或存储单元中。3.子程序调用时参数的传递方法 参数传递一般有下面三 种方法:(1)用寄存器传递)用寄存器传递 (2)用堆栈传送)用堆栈传送 (3)用存储单元传送。)用存储单元传送。 57五、五、 DOS 功能调用功能调用 为程序员编写汇编语言源程序时提供方便,MS-DOS系统中设置了几十个内部子程序,可供用

34、户调用。调用时需要使用软中断指令: INT n 其中DOS功能子程序的调用使用中断指令“INT 21H”,它共有80多个功能子程序,可完成磁盘读写控制,文件管理,存储管理,基本输入/输出管理等功能。调用功能子程序时需要用以下方式:(1)传送入口参数到指定寄存器中(2)调用的功能号送入AH寄存器(3)INT 21H58 带显示的键盘输入单字符(1号功能)格式: MOV AH,01H INT 21H (AL)=输入字符的ASCII码 不带显示的键盘输入单字符(8号功能)格式: MOV AH,08H INT 21H (AL)=输入字符的ASCII码 键盘输入字符串(0A号功能)格式: MOV DX,

35、缓冲区偏移量 MOV AH,0AH INT 21H BUF DB 30H DB ? DB 30H DUP(?)MOV DX,OFFSET BUFMOV AH,0AHINT 21H59 单字符显示(2号功能)格式: MOV DL,字符 MOV AH,02H INT 21H 字符串输出(9号功能)格式: MOV DX,字符串偏移量 MOV AH,09H INT 21H 直接输入/输出单字符(6号功能)格式: MOV DL,输入输出标志 MOV AH,06H (DL)=FFH,键盘输入 INT 21H 否则,DL内容输出CHAR DB BB DB 0DH DB 0AHDB $LEA DX,CHARM

36、OV AH,09HINT 21H(回车:0DH)(换行:0AH)60 返回操作系统(4CH号功能)格式: MOV AH,4CH INT 21H例:HELLO 程序61DATA SEGMENTHELLO DBHELLO!,0DH,0AH,$DATA ENDSSTACK1 SEGMENT PARA STACK DW 100 DUP(?)STACK1 ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK1START:MOV AX,DATA MOV DS,AX62;-LEA DX,HELLOMOV AH,09HINT 21H;- MOV AH,4CH INT

37、 21HCODE ENDS END START63六、实用程序设计举例六、实用程序设计举例(一)算术运算(一)算术运算为了实现十进制数的运算,可采用以下两种方法:1.数制转换2.直接用十进制数运算 目前计算机内部实现 BCD码运算的方法有以下两种: (1)指令系统中专门设置直接进行 BCD码的加、减、乘、除运算指令。 (2)先用二进制数的加、减、乘、除指令进行运算,然后对运算结果进行 BCD码的校正,这种方法只需增加校正指令即可实现十进制的运算,80486CPU就采用这种方法。64(二二)代码转换代码转换 输入设备提供的是字符和数字的ASCII码,而计算机内部是以二进制数进行运算的,当数据处理

38、结束后,又需要进行相反的转换,即将二进制数转换成ASCII码形式。例. 编程将十六位二进制数转换成四位十六进制数的ASCII码。十六进制数的ASCII码与二进制数之间的对照关系如下表。从表中可看到数字09,它的人进制数与ASCII码相差30H,而AF的二进制数与ASCII码相差37H,所以在转换时应当先对四位二进制数进行判断,如果是00001001,只需加上30H,若是10101111,则加上37H。65ASCII码与二进制数对照码与二进制数对照十六进制数字符ASCII码二进制数十六进制数字符ASCII码二进制数0 1 2 3 4 5 6 730H 31H 32H 33H 34H 35H 36

39、H 37H0000 0001 0010 0011 0100 0101 0110 01118 9 A B C D E F 38H 39H 41H 42H 43H 44H 45H 46H1000 1001 1010 1011 1100 1101 1110 111166程序编制如下:DATA SEGMENT BIN1 DW 1001110011010111BHEX1 DB 4 DUP(0)DATA ENDSSTACK1 SEGMENT PARA STACK DW 20H DUP(0)STACK1 ENDSCOSEG SEGMENT ASSUME CS:COSEG,DS:DATA,SS:STACK1 67BINHEX: MOV AX,DATA MOV DS,AX MOV CH,4 ;16进制数个数 LEA DI,HEX1 MOV BX,BIN1 ;取待转换的二进制数CONV1: MOV CL,4 ROL BX,CL ;循环左移四位,将最 MOV AL,BL ;高4位移至最低位 AND AL,0FH CMP AL,09H ;是09吗? JLE ASCI ADD AL,07H ;是AF68ASCI: ADD AL,30H MOV DI,AL ;存结果 INC DI DEC CH ;计数 JNZ CONV1 MOV AH,4CH INT 21HCOSEG ENDS END BINHEX69

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号