汇编语言程序设计-H.ppt

上传人(卖家):三亚风情 文档编号:3414839 上传时间:2022-08-29 格式:PPT 页数:98 大小:747.54KB
下载 相关 举报
汇编语言程序设计-H.ppt_第1页
第1页 / 共98页
汇编语言程序设计-H.ppt_第2页
第2页 / 共98页
汇编语言程序设计-H.ppt_第3页
第3页 / 共98页
汇编语言程序设计-H.ppt_第4页
第4页 / 共98页
汇编语言程序设计-H.ppt_第5页
第5页 / 共98页
点击查看更多>>
资源描述

1、12指令语句又称可执行语句,要求CPU执行某种操作。指令语句的格式为:标号:指令助记符 操作数 ;注释标号是该指令的符号地址,表示该指令的第一个字节地址。3指示词句又称伪指令,它不要求CPU执行某种操作,汇编时也不产生对应的机器代码,而仅仅告诉汇编程序,对它后面的指令语句和操作数应该如何产生机器目标代码。l伪指令的格式为:名字 伪指令定义符号 操作数 ;注释区别:伪指令名字后无冒号4常数是没有任何属性的纯数值。l常数分为两种类型:数值型常数字符串型常数 51.二进制数:以字母B结尾,如01011101B2.八进制数:以字母Q或O结尾,如723Q,211Q。3.十进制数:以字母D(或省略)结尾,

2、如1995D,3508。4.十六进制数:以字母H结尾,如3A40H,8BH。用单引号括起来的字符串。如ABCD,$123456等。每个字符在机内以ASCII码存放,例如A,在内存中为41H。6变量用来定义存放在存储器单元中的数据。其三重属性为:段属性(SEG)偏移地址属性(OFFSET)类型属性(TYPE)对变量的操作:LEA AX,FIRSTMOV AL,FIRSTMOV AX,SECOND变量名:存放数据存储单元的符号地址。78910MASM支持的运算符运算符类型符号名称运算结果实例算术运算符+加法和减法差*乘法乘积/除法商MOD模除余数SHL左移左移后二进制数SHR右移右移后二进制数2+

3、6=88-2=68*5=4022/5=412 MOD 3=032 MOD 6=2 0010B SHL 2=1000B1100B SHR 1=0101B11例:A1 EQU 1020+3300MOV BX,A1-1000MOV AX,35*5MOV DX,A1/100MOV CX,A1 MOD 100MOV AL,00001010B SHL 4等效于:A1 EQU 4320 MOV BX,3320 MOV AX,175 MOV DX,43 MOV CX,20 MOV AL,10100000B12运算符类型符号名称运算结果实例逻辑运算符NOT非运算逻辑非结果AND与运算逻辑与结果OR或运算逻辑或结

4、果XOR异或运算 逻辑异或结果NOT 1010B=0101B1011B AND1100B=1000B1011B OR 1100B=1111B1011B XOR 1100B=0110B13运算符类型符号名称运算结果实例关系运算符EQ相等NE不等LT小于LE不大于GT大于GE不小于 6EQ11B=全06NE11B=全15LT8=全17LE101B=全06GT100B=全16GE111B=全0结果为真输出全1结果为假输出全014例2:MOV AX,5 EQ 101B ADD BL,10H GT 16等效于:MOV AX,0FFFFH ADD BL,00H例1:MOV AL,NOT 10101010B

5、 MOV AL,11110000B AND 10111101B等效于:MOV AL,01010101B MOV AL,10110000B15运算符类型符号名称运算结果实例分析运算符SEG返回段基址OFFSET返回偏移地址LENGTH返回变量单元数TYPE返回元素字节数SIZE返回变量总字节数段基址偏移地址单元数字节数总字节数SEG N1=N1所在段段基址OFFSET N1=N1的偏移地址LENGTH N2=N2单元数TYPE N2=N2元素字节数SIZE N2=N2总字节数16 MOV AX,SEG FIRST MOV DI,OFFSET FIRST MOV AL,TYPE FIRST ;(A

6、L)=1 字节 MOV AL,TYPE SECOND ;(AL)=2 字 MOV BX,SEG LOP MOV SI,OFFSET LOP MOV AL,LENGTH FIRST ;(AL)=1 MOV AL,SIZE SECOND ;(AL)=2例:17ES:BX;DS:BLOCK运算符类型符号名称运算结果实例合成运算符PTR修改类型属性修改后类型THIS指定类型/距离属性指定后类型段寄存器名段前缀修改段HIGH分离高字节高字节LOW分离低字节低字节SHORT 短转移说明BYTE PTRBXALPHA EQU THIS BYTEHIGH 2345H=23HLOW 2345H=45HJMP S

7、HORT LABEL18nPTR:强制类型转换例:F1 DB 15H F2 DW 3132H ALPHA:MOV AL,BYTE PTR F2 JMP FAR PTR ALPHAnEQU THIS:指定类型及距离属性例:B-GAMA EQU THIS BYTE W-GAMA DW 1234H MOV AL,B-GAMA MOV AX,W-GAMA19运算符类型符号名称运算结果实例其它运算符()圆括号改变运算级优先级 方括号下标或间接寻址点运算符连接结构与变量尖括号修改变量MASK返回字段屏蔽码字段屏蔽码WIDTH返回记录宽度记录/字段位数(84)*4=16MOV AX,BXTABT1MASK

8、CWIDTH W20运算符的优先级表优先级符号高低1234567891011LENGTH,SIZE,WIDTH,MASK,(),PTR,OFFSET,SEG,YPE,THISHIGH,LOW+,(单目)*,/,MOD,SHL,SHR+,(双目)EQ,NE,LT,LE,GT,GENOTANDOR,XORSHORT212223(1)用数值表达式定义变量。例如:用数值表达式定义变量。例如:K1 DB 5AH ;将5AH赋给字节变量K1K2 DW 2354H ;将2354H赋给字变量K2K3 DD 2A00 4455H ;将2A00 4455H赋给双字变量K35AH54H23H55H44H00H2AH

9、K1K2K324(2)用字符串定义变量。例如:ONE DB “HOW ARE YOU”;将“HOW ARE YOU”字符串赋给变量ONE。TWO DW OK ;将OK字符串赋给变 量TWOHOW KOONETWO25(3)存放结果时,用(?)定义不确定值的变量ABOV DB?;定义变量ABOV为不确定值的字节变量BLOW DW?;定义变量BLOW为不确定值的字变量CLER DD?;定义变量CLER为不确定值的双字变量(4)用数组表达式定义变量。例如:A1 DB 00H,11H,22H,33HA2 DW 3456H,1025H,25*25,1000/3,10A0H例:MOV AL,A13 ;(A

10、L)=33H MOV AX,A22 ;(AX)=1025H26例:TAB1 DB 10 DUP(0)TAB2 DW 2 DUP(?)TAB3 DB 4 DUP(1,2 DUP(50H)2728【例1】ACOS EQU 1250H COUNT EQU 100 BUF EQU ACOS+1000H MOV CL,COUNT【例2】ONE=100 COUNT=100 A=ONE S=COUNT+100 A=A+100293031pPAGEPAGE:段的首地址后两位为段的首地址后两位为0000H H,页页边界开始边界开始pPARAPARA:(:(隐含)段的首地址后隐含)段的首地址后1 1位为位为0 0

11、H H,节节边界边界pDWORDDWORD:4 4的倍数的倍数pWORDWORD:偶地址偶地址 pBYTEBYTE:任一字节任一字节32u组合类型:pNONE:(隐含)与同名段不连接,独立存在。pSTACK:表明该段为堆栈段,不可缺省。pAT 表达式:表示本段可定义在表达式指示的节边界上。例:MCODE SEGMENT AT 2050H则该段的首地址为20500H。u字长选择:pUSE16:段字长为16位,最大段长为64KBpUSE32:段字长为32位,最大段长为4GBu分类名:用单引号括起,分类名相同的逻辑段存放在连续存储空间。333435例:STACK2 SEGMENT DW 40 DUP

12、(?)BOTTOM LABEL WORD;堆栈底的位置 STACK2 ENDS CODE SEGMENT ASSUME CS:CODE SS:STACK2START:MOV AX,STACK2 MOV SS,AX MOV SP,OFFSET BOTTOM CODE ENDS END START36例: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 ASSUM

13、E CS:CODE,DS:DATA,ES:EXTRA,SS:STACKSTART:MOV AX,DATA MOV DS,AX MOV AX,EXTRA MOV ES,AXCODE ENDS END START 3738n 简化段定义 DOSSEGMODEL SMALL486(支持32位寄存器操作)STACK DB 200HDATA BCDBUF DB 12HCODESTART:END START39过程定义伪指令(过程定义伪指令(PROC/ENDP)在程序设计中,常把具有一定功能的程序段设计成一个子程序,又称为过程。过程定义伪指令的格式如下:过程名 PROC(NEAR/FAR)RET过程名 E

14、NDP40其他伪指令其他伪指令1.LABEL 伪指令:用于给已定义的变量起一个别名。名称 LABLE 类型/距离2.(1)定位伪指令 定位伪指令的格式是:ORG 表达式 (2)当前位置计数器 在汇编程序时,用$表示当前的偏移地址值。DATA SEGMENT ST DB ABCDEFGH COUNT EQU$-ST DATA ENDS3、END 伪指令41汇编语言的上机过程汇编语言的上机过程(用MASM进行汇编)上机步骤如下:v用编辑程序(EDIT.COM)形成汇编语言源程序(.asm文件)v用汇编程序(MASM.EXE)对源程序进行汇编,形成目标文件(.obj文件)v用连接程序(LINK.EX

15、E)把目标文件转换成可执行文件(.exe)42上机步骤如下:一、建立扩展名为一、建立扩展名为.asm.asm的源文件程序。的源文件程序。可用任何文本编辑器编辑源文件均可。如记事本、WORDWORD、WPSWPS等,通常用DOSDOS自带的EDITEDIT编辑文件。二、用汇编程序二、用汇编程序MASMMASM或或TASMTASM产生目标文件产生目标文件MASM是支持宏指令的宏汇编程序(Microsoft公司)TASM也是支持宏指令的汇编程序(Borland公司)汇编程序的汇编对象是.asm文件43汇编的结果产生的文件:汇编的结果产生的文件:.obj 文件文件,默认与源文件同名的二进制目标,默认与

16、源文件同名的二进制目标文件。文件。.lst 文件,列表文件,此文件包括源程序和机文件,列表文件,此文件包括源程序和机器语言程序清单,以及使用的标号和变量的列器语言程序清单,以及使用的标号和变量的列表。方便查错。默认不建立。表。方便查错。默认不建立。44如果源程序有错,汇编会报告是哪类错误,有多少错,其中(warning errors)为警告错误,是一般性错误,不影响.obj文件的生成。若存在严重错误(severe errors)则影响目标文件的生成,需要返回到编辑环境对源程序进行修改,直到没有错为止。MASM 的完整格式为:的完整格式为:E:MASM option source,object,

17、listing,xref 主要主要Option参数参数 /l,/c,/zi45例:例:E:MASM TEST 只生成只生成TEST.OBJ文件文件 E:MASM TEST/L/ZI 生成生成TEST.OBJ和和TEST.LST 文件(含调试信息)文件(含调试信息)三、用LINK和TLINK程序产生.EXE文件。因为.obj文件还不是可执行文件,需要经过LINK/TLINK程序处理后,才能得到可执行文件即.exe文件。格式为:LINK objectfiles ,exefile,mapfile,libfiles46 LINK有两个输出文件.exe文件和.map文件其中.map文件是连接映像文件,它

18、给出每个段在存储器中的分配情况。四、程序的执行在DOS提示符下,直接敲入文件名,一般情况下,执行结果不可见,要用DUBUG来查看 由于汇编程序只能查出语法错误,对于程序的逻辑错误(如:算法、语句的多、少,转移是否正确等)都不能查出,因此汇编语言的正确性,通常需要通过DEBUG或TD调试程序来检验。47开始开始编辑成编辑成.ASM文件文件汇编成汇编成.OBJ文件文件有错?有错?连接成连接成.EXE文件文件NOYES调试运行调试运行有错?有错?结束结束NOYES上机过程图48加快汇编过程的方法vMASM ,;一次输入即可得到与源文件程序名相同的.obj .lst和.crf文件。vMASM 源文件名

19、,;一次输入可得到与与源文件程序名相同的.obj 和.lst文件vMASM 源文件名;只生成同名的.obj文件49连接也有类似情况vLINK 目标文件名,;一次输入可得到同名的.exe和.map文件vLINK 目标文件名;只生成同名的.exe文件vTD*.EXE进入TD调试程序50DEBUGDEBUG程序调试程序调试标志位标志位 设置设置/清除(清除(RF)溢出标志溢出标志 ov/nv 方向标志方向标志 dn(减)(减)/up(增)(增)中断允许中断允许 ei(启用)(启用)/di(禁用)(禁用)符号标志符号标志 ng(负)(负)/pl(正)(正)零零 标标 志志 zr/nz 辅助进位辅助进位

20、 ac/na 奇偶校验奇偶校验 pe(偶校验)(偶校验)/po(奇校验)(奇校验)进位标志进位标志 cy/nc51四四、程序设计概述、程序设计概述 与高级语言程序设计类似,在用汇编语言进行程序设计时,同样应按以下步骤进行。1.分析问题,建立数学模型 2.确定算法 3.编制程序流程图 4.编制程序 5.调试程序52一个源程序的基本格式如下:DATA SEGMENT DATA ENDSEXTRA SEGEMNT EXTRA ENDSSTACK1 SEGMENT PARA STACK STACK1 ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA ASSUME SS:

21、STACK1,ES:EXTRA;存放数据项的数据段;存放数据项的附加段;堆栈段53START:MOV AX,DATA MOV DS,AX MOV AX,EXTRA MOV ES,AX MOV AH,4CH INT 21HCODE ENDS END START(核心程序段);DD装入段基址;ES装入段基址;系统功能调用;返回操作系统54(一一)、顺序结构程序、顺序结构程序例1 编制程序,求下列公式中的Z值,并将结果存放到RESULT单元中。=Z(X+Y)*8-X2 设X,Y的值分别存放在VARX,VARY单元中,运算结果不超过16位。解:(1)存储单元 RESULT 用来存放结果,VARX 和

22、VARY 放 X、Y的值。寄存器 DX 放中间运算结果,左移 1 位相当于乘 2,右移 1 位相当于除 2,所以可以用左移 3 位得到乘以 8 的结果。55开始预置段寄存器DX XDX X+YDX右移得(X+Y)*8-X)/2RESULT DX结束DX左移3次(X+Y)*8DX (DX)-X(2)程序流程图和程序如下:56DATA SEGMENT VARX DW 0006H VARX DW 0006H VARY DW 0007H VARY DW 0007H RESUL DW RESUL DW?DATA ENDSSACK1 SEGMENT PARA STACK DW 100H DUP(?)DW

23、100H DUP(?)SACK1 ENDSCOSEG SEGMENT ASSUME CS:COSEG,DS:DATA57 START:MOV AX,DATA MOV DS,AX;-MOV DX,VARX ;DXX 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 RESULT,DX;-MOV AH,4CH ;系统功能调用,返回操作系统 INT 21HCOSEG ENDS END START58(二二)、分支程序、分支程序条件转移:J

24、cc 目标用于程序需要进行分别处理的情况。主要使用转移指令。转移指令分为无条件转移指令无条件转移指令 和条件转移指令条件转移指令。无条件转移指令:JMP 目标在进行分支程序设计时,通常用比较、测试,或算术运算、逻辑运算影响标志位,然后选择转移指令。59例1.符号函数 y=1 x0 0 x=0-1 x 0X=0X 0AL=0AL-1AL0AL1 NYNYYAL结束61DATA SEGMENT XX DB x YY DB?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX;-;-MOV AH,4CH INT

25、 21HCODE ENDS END START62MOV 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,AL63(三三)、循环程序循环程序 一个循环程序通常由以下四部分组成:n初始化部分 n循环体n修改部分n控制部分按结构又分为先判断后执行和先执行后判断循环程序常用指令:LOOP,LOOPE,LOOPNE,JCXZ64例1.计算Y=201iia解:定义数组名TABL存放 a1a20;和存放于单元YY中。中间结果存于寄存器AX中。

26、BX寄存器为地址指针,CX寄存器作计数器。设 a1,a2,a20是一组无符号十六位二进制数,并设其和不大于2个字节。(程序演示e4-2.asm)65DATA SEGMENTTABL DW 20 DUP(2)YY DW?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX;-;-MOV AH,4CH INT 21HCODE ENDS END START66MOVAX,0 MOV BX,OFFSET TABL MOV CX,20LOP:ADD AX,BX INC BXINC BXDEC CXJNZ LOP MO

27、V YY,AX 修改部分LOOP LOP初始化部分循环体控制部分67(A).循环的基本结构循环的基本结构1.先执行,后判断结构流程图如右:入口初始化部分循环体修改部分循环结束?出口YN68例2.编程统计数据块中正数的个数,并将其送 RS单元中。(程序演示count.asm)解:数据块定义为 D1,RS单元存放正数的个数,数据块长度用 COUNT表示。BX作地址指针,CX作计数器,DX记录正数的个数。69START预置段RBX D1 DX 0 CX COUNT BX0?DX DX+1BX BX+1 CX CX-1CX=0?RS(DX)ENDNYNY70DATA SEGMENT D1 DB -1,

28、-3,5,7,-9,-6,8,4COUNT EQU$-D1RS DW?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX;-;-MOV AH,4CH INT 21HCODE ENDS END START补码表示:FFH表示当前偏移地址.71 MOV RS,DX JUSTI:INC BX DEC CX JNZ LOP1MOV BX,OFFSET D1MOV CX,COUNTMOV DX,0LOP1:MOV AL,BX CMP AL,0JLE JUSTIINC DX如果求数据块中大于0的数之和,结果送RS单元

29、,试修改程序.LOOP LOP1初始化部分循环体修改部分控制部分722.先判断,后执行结构流程图如右入口初始化部分循环结束?循环体修改部分出口YN73例3.AX寄存器中有一个 16位的二进制数,编程统计其中值为 1的位的个数,并将结果存于CX中。(ppt-e4-3.asm)解:由于AX有可能为 0,若AX=0则不必再往下作统计工作,因此可采用先判断,后执行结构。流程图如右:74STARTCX0AX=0?AX左移CF=0?CX CX+1ENDYNYN75CODE SEGMENTASSUMECS:CODESTART:NOP;-MOVAX,1100101000111101BXORCX,CXAGAIN

30、:CMPAX,0;建立标志位 JZNEXTSHLAX,1JNCAGAIN;判断CFINCCXJMPAGAINNEXT:NOP;-MOVAH,4CHINT21HCODE ENDSEND STARTTEST AX,0FFFFH(AND AX,AX)76(B).循环控制方式循环控制方式1.计数控制用于计数次数已知的情况,可采用正计数或倒计数法。如例12.条件控制当计数次数无法确定,但循环次数与某些条件有关,并且条件可检测时,可采用条件控制,例如检测,比较或判断等形式。77例4.在一串字符串中查找某一关键字#,若查到,记下存放该关键字单元的偏移地址,若找不到用-1 作标记。解:设串变量名 STRING

31、,关键字单元CHAR,关键字单元的偏移地址放 FLAG单元。寄存器 SI为字符串的地址指针,CX为字符串长度,AL用于放关键字#。78STARTSI STRING的EA CX 串长度 AL#SI=AL?SI=SI+1CX-1=0?FLAG -1ENDFLAG SIYNYN还可用字符串指令实现79(C).多重循环多重循环循环体中又有循环称多重循环。开始循环控制条件循环体结束循环控制条件循环体80 程序设计过程中常常把多次引用的相同程序段编成一个独立的程序段,当需要只执行这个程序段时,可以用调用指令调用它。具有这种功能的程序段称为过程或子程序。(A)子程序的设计方法子程序的设计方法1、适合编成子程

32、序的程序有以下两大类:(1)程序需要反复使用,这类程序编成子程序可避免重复编写程序,并节省大量存储空间。(2)程序具有通用性,这类程序大家都要用到,如键盘管理程序,磁盘读写程序,标准函数程序等。编成子程序后便于用户共享。(四四)、子程序子程序812、编写子程序文件 为了使用户使用方便,子程序应当以文件形式编写。一般包含两部分:(1)子程序说明部分;子程序DTOB;将两位十进制数(BCD码)转换成二进制数;寄存器BX传递参数;入口参数:AL寄存器存放十进制数;出口参数:CL寄存器存放转换后的二进制数;执行时间0.06ms82(2)子程序程序部分子程序用过程定义伪指令(PROC/ENDP)定义,编

33、写格式如下:子程序名 PROC(NEAR/FAR)RET 子程序名 ENDPNEARNEAR:当子程序和调用程序在同一代码段;:当子程序和调用程序在同一代码段;FARFAR:当子程序和调用程序不在同一代码段。当子程序和调用程序不在同一代码段。;清清0 0子程序子程序DATADATASEGMENTSEGMENT BUF DB 20H DUP(?)BUF DB 20H DUP(?)DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENTASSUME CSASSUME CS:CODE,DSCODE,DS:DATADATASUSUPROC FARPROC FARPUSH D

34、SPUSH DSMOV AX,0MOV AX,0PUSH AXPUSH AXMOV AX,DATAMOV AX,DATA MOV DS,AX MOV DS,AX;-;-;-;-RETRETSUSUENDPENDPCODE ENDSCODE ENDS END SU END SU MOV BX,OFFSET BUF MOV BX,OFFSET BUF LP:MOV BX,0LP:MOV BX,0 INC BX INC BX CMP BX,20H CMP BX,20H JNZ LP JNZ LP842.2.调用子程序时寄存器及所用存储单元内容的保护。调用子程序时寄存器及所用存储单元内容的保护。如果子

35、程序中要用到某些寄存器或存储单元时,为了不破坏原有的信息,如果子程序中要用到某些寄存器或存储单元时,为了不破坏原有的信息,要将寄存器或存储单元的原有内容压栈保护或存入子程序不用的寄存器或存要将寄存器或存储单元的原有内容压栈保护或存入子程序不用的寄存器或存储单元中。储单元中。(B)子程序使用中的问题)子程序使用中的问题 1.1.子程序的调用和返回子程序的调用和返回 主程序调用子程序主程序调用子程序 是通过是通过CALL指令来实现,子程序执行后,通过指令来实现,子程序执行后,通过RET指令返回主程序指令返回主程序3.3.子程序调用时参数的传递方法子程序调用时参数的传递方法(1)用寄存器传递)用寄存

36、器传递(2)用堆栈传送)用堆栈传送(3)用存储单元传送。)用存储单元传送。85五、五、DOS 功能调用功能调用 为程序员编写汇编语言源程序时提供方便,MS-DOS系统中设置了几十个内部子程序,可供用户调用。调用时需要使用软中断指令:INT n 其中DOS功能子程序的调用使用中断指令“INT 21H”,它共有80多个功能子程序,可完成磁盘读写控制,文件管理,存储管理,基本输入/输出管理等功能。调用功能子程序时需要用以下方式:(1)(1)传送入口参数到指定寄存器中传送入口参数到指定寄存器中(2)(2)调用的功能号送入调用的功能号送入AHAH寄存器寄存器(3)(3)INT 21HINT 21H86n

37、键盘输入字符串键盘输入字符串(0(0A A号功能号功能)格式:格式:MOV DX,缓冲区偏移量缓冲区偏移量 MOV AH,0AH INT 21H BUF DB 30H DB?DB 30H DUP(?)MOV DX,OFFSET BUFMOV AH,0AHINT 21Hn带显示的键盘输入单字符带显示的键盘输入单字符(1(1号功能号功能)格式:格式:MOV AH,01H INT 21H (AL)=输入字符的输入字符的ASCII码码n不带显示的键盘输入单字符不带显示的键盘输入单字符(8(8号功能号功能)格式:格式:MOV AH,08H INT 21H (AL)=输入字符的输入字符的ASCII码码87

38、n直接输入直接输入/输出单字符输出单字符(6(6号功能号功能)格式:格式:MOV DL,输入输出标志输入输出标志 MOV AH,06H (DL)=0FFH,键盘输入键盘输入 INT 21H 否则否则,DL内容输出内容输出CHAR DB BB$DB 0DH DB 0AHLEA DX,CHARMOV AH,09HINT 21H(回车:0DH)(换行:0AH)n单字符显示单字符显示(2(2号功能号功能)格式:格式:MOV DL,字符字符 MOV AH,02H INT 21Hn字符串输出字符串输出(9(9号功能号功能)格式:格式:MOV DX,字符串偏移量字符串偏移量 MOV AH,09H INT 2

39、1H88n返回操作系统返回操作系统(4(4CHCH号功能号功能)格式:MOV AH,4CH INT 21H演示doscall.asm程序。89六、实用程序设计举例六、实用程序设计举例【例4-3】用变址寻址实现多个16位数加法。(E4-3.ASM)DATA SEGMENT TABLE DW 1234H,5678H,0EAFBH;10个数 LSBA DW?HSBA DW?DATA ENDSSTACK1 SEGMENT PARA STACK DB 64 DUP(0)STACK1 ENDS90CODE SEGMENTMP PROC FAR ASSUME CS:CODE,DS:DATA,SS:STACK

40、1 PUSH DS SUB AX,AX ;返回操作系统 PUSH AX MOV AX,DATA MOV DS,AX MOV SI,00H MOV AX,TABLESI MOV CX,09H91AGIN:ADD SI,02H ADD AX,TABLESI ADC DX,00H LOOP AGIN MOV LSBA,AX MOV HSBA,DX RETMP ENDPCODE ENDS END MP92【例4-5】编程将十六位二进制数转换成四位十六进制数的ASCII码。解:十六进制数的ASCII码与二进制数之间的对照关系如下表。从表中可看到数字09,它的十进制数与ASCII码相差30H,而AF的二进

41、制数与ASCII码相差37H,所以在转换时应当先对四位二进制数进行判断,如果是00001001,只需加上30H,若是10101111,则加上37H。93ASCII码与二进制数对照码与二进制数对照十六进制数字符ASCII码二进制数十六进制数字符ASCII码二进制数0 1 2 3 4 5 6 730H 31H 32H 33H 34H 35H 36H 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 11

42、1194程序编制如下:DATA SEGMENT BINI DW 1001,1100,1101,0111BHEXI DB 4 DUP(0)DATA ENDSSTACKI SEGMENT PARA STACK DW 20H DUP(0)STACKI ENDSCOSEG SEGMENT ASSUME CS:COSEG,DS:DATA,SS:STACKI 95BINHEX:MOV AX,DATA MOV DS,AX MOV CH,4 ;16进制数个数 LEA DI,HEXI MOV BX,BINI ;取待转换的二进制数CONV1:MOV CL,4 ROL BX,CL ;循环左移四位,将最 MOV AL,BL ;高4位移至最低4位 AND AL,0FH CMP AL,09H ;是09吗?JLE ASCI ADD AL,07H ;是AF96ASCI:ADD AL,30H MOV DI,AL ;存结果 INC DI DEC CH ;计数 JNZ CONV1 MOV AH,4CH INT 21HCOSEG ENDS END BINHEX9798

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 办公、行业 > 各类PPT课件(模板)
版权提示 | 免责声明

1,本文(汇编语言程序设计-H.ppt)为本站会员(三亚风情)主动上传,163文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。
2,用户下载本文档,所消耗的文币(积分)将全额增加到上传者的账号。
3, 若此文所含内容侵犯了您的版权或隐私,请立即通知163文库(发送邮件至3464097650@qq.com或直接QQ联系客服),我们立即给予删除!


侵权处理QQ:3464097650--上传资料QQ:3464097650

【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。


163文库-Www.163Wenku.Com |网站地图|