第4章 汇编语言及汇编程序设计1.pdf

上传人:asd****56 文档编号:70321650 上传时间:2023-01-19 格式:PDF 页数:64 大小:344.17KB
返回 下载 相关 举报
第4章 汇编语言及汇编程序设计1.pdf_第1页
第1页 / 共64页
第4章 汇编语言及汇编程序设计1.pdf_第2页
第2页 / 共64页
点击查看更多>>
资源描述

《第4章 汇编语言及汇编程序设计1.pdf》由会员分享,可在线阅读,更多相关《第4章 汇编语言及汇编程序设计1.pdf(64页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。

1、第四章第四章 汇编语言及汇编程序设计汇编语言及汇编程序设计一、概述二、伪指令三、表达式及运算符四、宏指令五、汇编语言程序的上机过程六、汇编程序的设计过程七、汇编程序基本设计方法八、系统功能调用 例题作业作业一、概述一、概述 汇编语言是一种面向CPU指令系统的程序设计语言。指令格式:标号:指令助记符操作数;注释,1 1、标号标号是指该指令的符号地址,以冒号结束;是指该指令的符号地址,以冒号结束;2 2、用助记符表示操作码,是指令名称的代表符号,、用助记符表示操作码,是指令名称的代表符号,是语句中的关键字,不可缺省;是语句中的关键字,不可缺省;一、概述一、概述(续上页续上页)3、用符号代表操作数或

2、操作数地址。操作数是本指令执行需要的数据。有些指令不需要指明操作数,可以默认;有些指令需要两个操作数;还有些操作数可以用表达式。4、注释项是可选项,用分号开始。标号:指令助记符操作数;注释,一、概述一、概述(续上页续上页)用汇编语言编写的程序称为源程序,常用的汇编程序有ASM-86和宏汇编MASM-86。汇编语言源程序的组成部分:可以使用CPU指令系统所提供的指令(硬指令);可以使用各种符合汇编语法的表达式,运算符以及自行定义生成满足需要的目标代码的指令。1、标号、标号 8086/8088汇编语言中使用的标号必须遵循下列规则:(1)大小写字母;(2)数字09;(3)某些特殊字符(,_,?)(4

3、)第一个字符不能是数字,“?”不能单独作为标号。(5)标号的有效长度是31;有效标号:START MY_PROGRAM 无效标号:MAIN%1BETA二、伪指令二、伪指令 伪指令是告诉汇编程序生成目标代码的指示语句。1、符号定义伪指令 2、内存数据定义伪指令 3、段定义伪指令 4、段寄存器说明伪指令 5、定位伪指令 6、子程序伪指令1、符号定义伪指令、符号定义伪指令 (1)EQU伪指令 (2)等号(赋值)伪指令 (3)解除符号定义伪指令(1)EQU伪指令伪指令伪指令格式:EQU 指令功能:给符号名赋值。符号名可以由程序员取定,表达式应该是可以计算得出一个具体值。例:PORT EQU 88H;定

4、义符号PORT代表88H DATA EQU PORT+2;定义符号DATA代表 ;PORT+2注意:用EQU定义的符号,不能重新再定义,除非用PURGE伪指令解除;如果在表达式中用了其他符号,必须事先定义。(2)等号等号(赋值赋值)伪指令伪指令伪指令格式:=指令功能:与EQU类似,唯一的区别是“=”可以随时对符号名赋新值,而不必使用PURGE伪指令。例:PORT=88H;定义符号PORT代表88HDATA=PORT+2;定义符号DATA代表PORT+2(3)解除符号定义伪指令解除符号定义伪指令伪指令格式:PURGE 符号1,符号2,指令功能:撤消用EQU赋值的符号名,以便于赋予新值。例:PUR

5、GE PORT,DATA;撤消用EQU对PORT、DATA的赋值2、内存数据定义伪指令、内存数据定义伪指令格式:变量 命令 参数1,参数2,功能:数据定义语句用来分配存储单元。数据定义语句的命令有:DB 定义字节数据 DW定义字数据 DD 定义双字数据 DQ定义8字节数据 DT 定义10字节数据2、内存数据定义伪指令、内存数据定义伪指令复制操作符 格式:DUP 数据1,数据2,功能:汇编程序把所定义的数据按先后次序连续分配存储空间,所起的名称只代表第一个单元的字符。例题2、内存数据定义伪指令、内存数据定义伪指令例例43:VAR1 DB 32H,ABCVAR2 DW 1234H,40H,AB D

6、D 12345678H DB?,11000011BARRY1 DB 2 DUP(0,1)ARRY2 DW 2 DUP(?,(?,1)-C3H00H01H00H-01H00H-01H00H第一组字方式的?,111000011BARRY1ARRY201H-预留的存储单元第一组字节方式的0,1第二组字节方式的0,1第二组字方式的?,1.(上接左下)32H41H42H43H34H40H42H41H78H56H34H12H1234H0040HA12345678HABCVAR1VAR212H00HB.(下接右上)2、内存数据定义伪指令、内存数据定义伪指令例46、47:NAME SAMPLEDATA SEG

7、MENT X DB 10H EVEN Y DW 0200H ORG 06H Z DB ADATA ENDSSTACK SEGMENT DW 128 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,DATA MOV DS,AX MOV AX,STACK MOV SS,AX .CODE ENDSEND STARTDS:0000 X 10H 0001 -0002 Y 00 0003 02 0004 -0005 -0006 Z 41.SS:0000 -0001 -.00FF -3、表达式及运算符、表达式及

8、运算符综合例412、413、414、417:DATA SEGMENT X DB 10H,AB AGE DW 1234 VAR DW 10 DUP(?)CNT EQU$-XDATA ENDSSTACK SEGMENT DW 10 DUP(?)STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKSTART:MOV AX,SEG START ;AX=CS .MOV AL,X+2 ;AL=42H MOV CL,3*3/2MOD3 ;3*3/2=4,4MOD3=1,CL=1 ADD CL,44HSHR 1 ;CL=22H+CL MOV BX,VAR

9、-X ;BX=5 MOV AL,TYPE X ;AL=1 MOV BL,TYPE AGE ;BL=2 MOV DH,0F0H OR 88H ;DH=0F8H MOV CL,LENGTH VAR ;CL=10D MOV CL,SIZE VAR ;CL=10*2 MOV AH,HIGH AGE ;AH=12H CODE ENDSEND STARTDS:0000 X 10H 0001 41 0002 42 0003 AGE 34 0004 12 0005 VAR -0006 -.000E -000F CNT.SS:0000 -0001 -.0013 -三、表达式及运算符三、表达式及运算符 在汇编语言

10、中,指令的操作数除了可以是常数、在汇编语言中,指令的操作数除了可以是常数、寄存器、变量和标号外,还可以是表达式。寄存器、变量和标号外,还可以是表达式。表达式表达式是由常数、寄存器、变量、标号和专用是由常数、寄存器、变量、标号和专用运算符组合而成。运算符组合而成。在程序汇编时,汇编程序自动把这些表达式计在程序汇编时,汇编程序自动把这些表达式计算出来,形成具体的指令操作数。算出来,形成具体的指令操作数。1、常数、变量和标号常数、变量和标号 2、表达式及运算符表达式及运算符 3、例题返回1、常数、变量和标号、常数、变量和标号常数常数 包括数值型常数和字符型常数。包括数值型常数和字符型常数。如:如:1

11、2H,1234H,AB变量变量 变量代表存放在存储单元中的数据。变量代表存放在存储单元中的数据。定义后的变量有三个属性:定义后的变量有三个属性:(1)段属性表示变量所在的逻辑段;段属性表示变量所在的逻辑段;(2)偏移量属性表示变量所在逻辑段中的偏移地偏移量属性表示变量所在逻辑段中的偏移地址;址;(3)类型属性表示变量占用的存储单元数,类型属性表示变量占用的存储单元数,DB、DW、DD、DQ、DT。1、常数、变量和标号、常数、变量和标号标号标号 是指令目标代码的符号地址。是指令目标代码的符号地址。在转移指令中常用标号代替具体转移地址,标号的使用在转移指令中常用标号代替具体转移地址,标号的使用使编

12、写汇编语言程序时,不必考虑程序汇编、连接后系使编写汇编语言程序时,不必考虑程序汇编、连接后系统分配给指令代码的实际地址。统分配给指令代码的实际地址。标号同样有三个属性:标号同样有三个属性:(1)段属性表示指令代码所在的逻辑段;段属性表示指令代码所在的逻辑段;(2)偏移量属性表示指令代码所在的逻辑段中的偏移地偏移量属性表示指令代码所在的逻辑段中的偏移地址;址;(3)距离属性表示标号可作段内转移或段间转移距离属性表示标号可作段内转移或段间转移(NEAR、FAR)。)。2、表达式及运算符、表达式及运算符表达式由操作数和运算符组成。其中,操作数可以是常数、变量、寄存器和标号。运算符包括算术运算符、逻辑

13、运算符、关系运算符、分析运算符和属性运算符五类运算。注意:运算符的先后次序。五、汇编语言程序的上机过程五、汇编语言程序的上机过程 建立汇编语言的环境,典型的汇编语言开发环境都包含4种工具:1、编辑程序 2、汇编程序 3、连接程序 4、汇编程序的上机过程1、编辑程序、编辑程序 (1)(1)编辑程序是用来输入汇编语言源程序的工具,编辑程序是用来输入汇编语言源程序的工具,编辑程序是用来输入汇编语言源程序的工具,编辑程序是用来输入汇编语言源程序的工具,包括包括包括包括EDIT.EXEEDIT.EXE,EDLIN.EXE EDLIN.EXE等;等;等;等;(2)(2)汇编语言是以文本格式保存的;汇编语言

14、是以文本格式保存的;汇编语言是以文本格式保存的;汇编语言是以文本格式保存的;(3)(3)汇编程序的源程序必须以汇编程序的源程序必须以汇编程序的源程序必须以汇编程序的源程序必须以ASMASM作为作为作为作为扩展名扩展名扩展名扩展名;(4)(4)输入和编辑源程序时必须遵循汇编语言的语法输入和编辑源程序时必须遵循汇编语言的语法输入和编辑源程序时必须遵循汇编语言的语法输入和编辑源程序时必须遵循汇编语言的语法规定。规定。规定。规定。汇编程序的基本结构汇编程序的基本结构汇编程序的基本结构汇编程序的基本结构 例题例题例题例题 实际操作实际操作实际操作实际操作:编辑源程序编辑源程序编辑源程序编辑源程序 TES

15、T11.ASMTEST11.ASM汇编程序的基本结构汇编程序的基本结构DATAA SEGMENT ;数据段内定义各类程序执行需要的相关的数据DATAA ENDSSTACKA SEGMENT ;根据具体程序的需要,定义堆栈段供程序执行过程 ;中保持临时数据STACKA ENDSCODEA SEGMENT ASSUME CS:CODEA,DS:DATAA,SS:STACKA START:MOV AX,DATAA MOV DS,AX ;完成具体操作的指令序列CODEA ENDS END START实际操作实际操作(实现实现X+YZ,源程序文件名源程序文件名:TEST11.ASM)DATA1 SEGM

16、ENT ;数据段 X DB 05H Y DB 04H Z DB?DATA1 ENDS CODE1 SEGMENT ;代码段 ASSUME CS:CODE,DS:DATA START:MOV AX,DATA ;数据段基址AX MOV DS,AX ;AX DS MOV AL,X ;内存单元X的数据AL ADD AL,Y ;内存单元Y的数据+ALAL,即X+Y AL MOV Z,AL ;AL内存单元Z,即求和结果送回Z MOV AH,4CH ;送功能号 INT 21H ;系统功能调用,返回操作系统 CODE1 ENDS END START2、汇编程序、汇编程序 (1)汇编程序用来把源程序翻译成机器码

17、,包括ASM.EXE,MASM.EXE;(2)汇编程序翻译源程序,产生一个目标代码文件,与源程序文件名相同,扩展名为OBJ。实际操作:产生目标文件TEST11.OBJ3、连接程序、连接程序 通过汇编产生的是OBJ文件是二进制目标文件,但用的是浮动地址,不能直接运行,必须用连接程序LINK.EXE连接和定位。实际操作:产生可执行文件TEST11.EXE4、汇编程序的上、汇编程序的上机过程机过程开始开始编写汇编源程序并用编写汇编源程序并用文本编辑程序输入文本编辑程序输入用用MASMMASM汇编源程序汇编源程序用用LINKLINK连接目标代码文件连接目标代码文件在在DOSDOS操作系统下操作系统下执

18、行执行EXEEXE文件文件需要修改源程序吗需要修改源程序吗?结束结束N NY YY YN NN NN NY Y有语法错误吗有语法错误吗?有语法错误吗有语法错误吗?运行结果有错误运行结果有错误?实际操作演示实际操作演示data1 segment;数据段开始x db 05hy db 04hz db?buff db 5+4=$;定义一个数据串,数据串规定以$结尾,为了显示5+4=data1 endscode1 segment;代码段开始 assume cs:code1,ds:data1;段寄存器说明伪指令start:mov ax,data1;将数据段基址ax mov ds,ax;axds mov a

19、l,x;内存数据xal add al,y;内存数据Y+alal,即X+Y al mov z,al;alZ,即X+Y Z lea dx,buff;装载 buff的有效地址 mov ah,09h;送功能号 int 21h;系统功能调用,显示屏显示字符串5+4=mov dl,z;将z送dl add dl,30h;将z的值转换成对应的ASCII码值 mov ah,02h;送功能号 int 21H;系统功能调用,将x+y的和z以单字符形式在显示屏上显示出来 mov ah,4ch;送功能号 int 21h;系统功能调用,返回DOS状态code1 ends end start 返回六、汇编程序的设计过程六、

20、汇编程序的设计过程 1、分析问题确定算法 2、绘制程序流程图(做作业一定要求)3、编写代码七、汇编程序基本设计方法七、汇编程序基本设计方法 1、简单程序 作业 2、分支程序 实验 两路分支程序设计 3、循环程序 4、子程序1、简单程序、简单程序 简单程序是指顺序结构程序,在程序中不包含任何转移类指令。执行时按指令的先后次序从第一条开始逐条执行,直至程序结束。例题例例4-25 1、有X,Y两个16位数3456H和0ABCDH,求两数之和,并将结果送到Z单元。解:编写流程图开始开始结果送结果送Z结束结束 初始化初始化取段基址取段基址被加数指针被加数指针加数指针加数指针DSSIDI被加数被加数AX被

21、加数+加数被加数+加数AX例例4-25 程序清单程序清单 DATA SEGMENT XDW3456H YDW0ABCDH ZDW?DATA ENDS;设置数据段,取名DATA CODE SEGMENT ASSUME DS:DATA,CS:CODESTART:MOV AX,DATA;取数码段DATA段址至AX MOV DS,AX;段地址送DS LEA SI,X ;将X的有效地址送S1 LEA DI,Y ;将Y的有效地址送D1 MOV AX,SI;将X的值送AX ADD AX,DI;AX+Y的值送回AX MOV Z,AX;将AX的值送到存储单元Z MOV AH,4CH;设置功能号 INT 21H

22、;系统功能调用,返回DOS CODE ENDS END START 习题习题41如某程序中的数据段定义如下:如某程序中的数据段定义如下:DATA1 DW 2 DUP(1)DATA2 DB 16,25,42DATA3 DD?CNT EQU$-DATA1问:问:CNT的值是多少?它表示什么意义?的值是多少?它表示什么意义?答:答:0000 DATA1 01 00 01 00 0004 DATA2 10 19 2A 0007 -.000A -000B CNT 即即 -DATA1=11,表表示当前的偏移地址,示当前的偏移地址,表示这个数据段有表示这个数据段有11个字节个字节,CNT的值是的值是11习题

23、习题42已知数据段定义如下,假设该数据段从已知数据段定义如下,假设该数据段从08000H开始:开始:DATA SEGMENTVAR1 DB 2 DUP(0,?)VAR2 DW 1234H ORG 8VAR3 DB 5VAR4 DW ABDATA ENDS答:各变量在内存中的分配情况如下:答:各变量在内存中的分配情况如下:08000H VAR1 00 -00 -08004H VAR2 34 12 .08008H VAR3 05 08009H VAR4 42 0800AH 41 习题习题43有两个32位数分别存放在DATA1和DATA2开始的内存单元中,编一个程序求两数之和,结果放到SUN开始的单

24、元中答:程序如下:答:程序如下:DATA SEGMENT ORG 50HDATA1 DW 4567H,89ABHDATA2 DW 1234H,5678HSUN DW 2 DUP(?)DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATASTART:MOV AX,DATA MOV DS,AX LEA SI,DATA1 LEA DI,DATA2 LEA BX,SUN MOV AX,SI ADD AX,DI MOV BX,AX INC SI INC SI INC DI INC DI INC BX INC BX MOV AX,SI ADC AX,DI MOV BX,

25、AXMOV AH,4CH INT 21HCODE ENDS END START2、分支程序、分支程序 分支程序就是利用转移指令,控制计算机执行某段程序或不执行某段程序。满足判满足判断条件?断条件?是是程序段程序段1程序段程序段2否否满足判断条件满足判断条件1?程序段程序段1满足判断条件n?满足判断条件n?程序段程序段n程序段n+1程序段n+1.程序段2程序段2.是是否否否否否否否否是是是是满足判断条件2?满足判断条件2?两路分支两路分支 实验实验多路分支多路分支 实验实验例题例题例例4-27 1、内存中有一个8位带符号数,求其绝对值,并将结果放回原处。答:编写流程图取段基址送取段基址送 DS取

26、操作数指针送取操作数指针送 SI将带符号数送 将带符号数送 AL求补求补将求绝对值的将求绝对值的数送回原内存数送回原内存YN开始开始小于零吗 小于零吗?结束结束系统功能调用,系统功能调用,在屏幕上在屏幕上显示该内存单元的数值显示该内存单元的数值程序清单程序清单例例4-27 程序清单程序清单DATA2 SEGMENT M DB 05H;第二个程序换成第二个程序换成5,即,即0fbhDATA2 ENDSCODE2 SEGMENT ASSUME CS:CODE2,DS:DATA2START:MOV AX,DATA2 MOV DS,AX;送段地址至送段地址至DS LEA SI,M;取取M的指针的指针

27、MOV AL,SI;取带符号数取带符号数 AND AL,AL;判断符号位判断符号位 JNS DONE;SF=0,转移到转移到DONE NEG AL;SF=1,AL0)Y=0 (当X=0)9 (当X=0?AX0?结束结束系统功能调用,系统功能调用,在屏幕在屏幕上显示Y的数值上显示Y的数值程序清单程序清单例例4-28 程序清单程序清单_数据段数据段DATAXY SEGMENT X DB 8FH;另外两组分别是7FH,00H Y DB?DATAXY ENDS例题例题4-28 程序清单程序清单_代码段代码段CODE SEGMENT ASSUME CS:CODE,DS:DATAXYSTART:MOV A

28、X,DATAXY MOV DS,AX;送段地址 LEA SI,X ;取X的指针 MOV AL,SI;将X的值送AL AND AL,AL;自身与,取符号标志位 JNS OTHER;SF=0,转移到OTHER MOV Y,09H;SF=1,则X0DONE:MOV DL,Y ADD DL,30H MOV AH,02H INT 21H;系统功能调用,显示Y的 值 MOV AH,4CH INT 21HCODE2 ENDS END START实验二实验二 两路分支程序设计两路分支程序设计CODE SEGMENT ASSUME CS:CODESTART:MOV CX,10H ;字符串长度字符串长度 MOV

29、SI,3000H ;源串首地址源串首地址 MOV DI,3200H ;目的串首地址目的串首地址 CMP SI,DI ;比较首地址大小比较首地址大小 JA LP2 ;SI大于大于DI转去转去LP2 ADD SI,CX ;DI大于大于SI继续执行继续执行 ADD DI,CX ;STD DEC SI ;REP MOVSB DEC DI LP1:MOV AL,SI MOV DI,AL DEC SI DEC DI DEC CX JNE LP1 JMP LP3 ;结束结束 LP2:MOV AL,SI ;CLD MOV DI,AL ;REP MOVSB INC SI INC DI DEC CX JNE LP

30、2 LP3:MOV AH,4CH;结束结束 INT 21H CODE ENDS END START 源串源串 目的串目的串 LP1 LP2实验二实验二 多路分支程序设计多路分支程序设计DATA SEGMENT TAB DW LAB0,LAB1,LAB2,LAB3,LAB4,LAB5,LAB6DATA ENDSSTACK SEGMENT STA DW 32 DUP(?)TOP DW WORDSTACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACKBEGIN:MOV AX,DATA MOV DS,AX MOV AH,1 INT 21H CMP

31、AL,A JB RET CMP AL,G JA RET SUB AL,A AND AX,0FH SHL AX,1 MOV BX,AX JMP TABBX LAB0:MOV DL,A JMP DONE LAB1:MOV DL,B JMP DONE LAB2:MOV DL,C JMP DONE LAB3:MOV DL,D JMP DONE LAB4:MOV DL,E JMP DONE LAB5:MOV DL,F JMP DONE LAB6:MOV DL,G JMP DONE DONE:MOV AH,2 INT 21H RET:MOV AH,4CH INT 21H CODE ENDS END BEG

32、IN3、循环程序、循环程序 循环程序就是控制计算机反复执行一段指令序列的程序结构。循环控制循环控制循环体循环体循环参数修改循环参数修改继续循环继续循环结束循环结束循环初始化初始化结束处理结束处理继续循环继续循环结束循环结束循环初始化初始化循环控制循环控制循环体循环体结束处理结束处理循环参数修改循环参数修改非零次循环结构非零次循环结构零次循环结构零次循环结构例题 1、统计字节数据Z的1的个数,将结果放在RESULT内。解:编写流程图例例题题循环初始化循环初始化取字节数据送取字节数据送AL设置循环次数设置循环次数 CX=08HAL 右移右移 1位位CF=1?YBL+1BLNNCX=0?将统计结果将

33、统计结果BL送送RESULT结束结束CXY开始开始计数器BX清零计数器BX清零CX-1程序清单程序清单例题例题 程序清单程序清单 数据段数据段DATAXY SEGMENT X DB 0FFH ;第二个程序换成5,即0fbh RESULT DB?DATAXY ENDS例题例题 程序清单程序清单 代码段代码段CODE SEGMENT ASSUME CS:CODE,DS:DATAXYSTART:MOV AX,DATAXY MOV DS,AX;送段地址至DSXOR BL,BL;累加器BL清0MOV CX,08H;循环次数送CXLEA SI,X;取X的指针MOV AL,SI;取X送ALSUM:ROR A

34、L,1;逻辑右移1位JNC NONE;CF=0,转移到NONEINC BL;CF=1,BL+1BLNONE:LOOP SUM MOV RESULT,BL;统计值送RESULT内存单元 MOV DL,RESULT ADD DL,30HMOV AH,02HINT 21H;系统功能调用,显示该统计数值 MOV AH,4CH INT 21HCODE ENDS END START4、子程序、子程序 一个程序中,当在不同的地方需要多次使用某段程序时,我们常将这段程序单独编写成一个程序段,称为子程序/过程。(1)子程序的定义格式(2)子程序的调用(3)编写子程序的注意事项(1)子程序的定义格式)子程序的定义

35、格式 格式:子程序名 PROC RET 子程序名 ENDP(2)子程序的调用)子程序的调用 格式:CALL 子程序名(3)编写子程序的注意事项)编写子程序的注意事项 1、现场保护:保护调用子程序的现场,即保护子程序中会用到的寄存器,将这些寄存器入栈;2、功能子程序:子程序要完成的功能;3、恢复现场:为了使计算机返回到主程序调用时的状态,将入栈的数据出栈。注意顺序!例题:子程序的基本框架子程序的基本框架子程序的基本框架 设某一子程序中要用到寄存器设某一子程序中要用到寄存器BX,CX,SI,DI则:则:ABC:PUSH BX PUSH CX PUSH SI PUSH DI ;子程序的功能程序子程序

36、的功能程序 POP DI POP SI POP CX POP BX RET例题例题1 编写统计X数据中的“1”的个数子程序,并编写主程序调用。子程序如下:ABC:PUSH BX PUSH CX XOR BL,BL;累加器BL清0 MOV CX,08H;循环次数送CXSUM:SHR AL,1;逻辑右移1位 JNC NONE;CF=0,转移到NONE INC BL;CF=1,BL+1BLNONE:LOOP SUM MOV AL,BL ;AL里保存的是“1”的统计个数 POP CX POP BX RET例题例题1 主程序主程序_数据段数据段_堆栈段堆栈段DATAXY SEGMENT X DB 0FF

37、H SX DB?DATAXY ENDS;-STACK SEGMENT DW 100 DUP(?)STACK ENDS例题例题1 主程序主程序_代码段代码段CODE1 SEGMENT ASSUME CS:CODE1,DS:DATAXY,SS:STACKSTART:MOV AX,DATA MOV DS,AX LEA BX,X MOV AL,BX CALL ABC MOV BX+1,AL MOV DL,SX ADD DL,30H MOV AH,02H INT 21H ;系统功能调用,显示该统计数值系统功能调用,显示该统计数值 MOV AH,4CH INT 21H ;子程序插入此处子程序插入此处COD

38、E1 ENDS END START 例题例题2、将一字节无符号二进制数转换为两位十进制数的ASCII码值,并存放在其后的两个字节。(显示程序用子程序编写)。解:编写流程图:取段基址送取段基址送 DS取操作数指针送取操作数指针送 SI将无符号数送 将无符号数送 AL子程序调用,子程序调用,在屏幕上显示该数在屏幕上显示该数开始开始结束结束AL扩展成AXAL扩展成AXAX/10,商为十位数AX/10,商为十位数 余数为个位数 余数为个位数分别送回指定内存单元分别送回指定内存单元程序程序数据段数据段data1 segment x db 2ah;可任取100的无符号字节数据 y db?z db?buff

39、 db 2ah=$data1 ends代码段:代码段:code1 segment assume cs:code1,ds:data1 start:mov ax,data1 mov ds,ax mov al,x cbw mov bl,0ah div bl mov y,al mov z,ah lea dx,buff mov ah,09h int 21h mov al,y ;下接右上下接右上;上接左下上接左下 call disp mov al,z call disp jmp eend disp:mov dl,al add dl,30h mov ah,02h int 21h ret eend:mov a

40、h,4ch int 21hcode1 endsend start思考题思考题 试编制程序将一个字数据用十六进制数的形式显示在屏幕上。八、系统功能调用八、系统功能调用 MS-DOS是8086/8088微机系统广泛使用的一种操作系统。MS-DOS中包含有许多通用的内部子程序,分别用于完成I/O管理、内存管理、文件管理以及作业管理等。MS-DOS以中断服务程序形式提供这些功能程序,在汇编语言源程序中可以用软中断调用它们。系统功能调用(INT 21H)应用步骤:(1)传送入口参数到规定的寄存器或存储单元;(2)把子程序功能编号送到AH寄存器;(3)执行软件中断指令INT 21H。常用的系统功能介绍常用

41、的系统功能介绍(1)返回操作系统(功能号:4CH)通常程序结束时,需调用4CH的系统功能把微机的控制权交还给操作系统,方法如下:MOV AH,4CH ;功能号送AH INT 21H ;调用功能子程序 在编程结束前,将以上两条指令插入,前面许多例题已经使用。常用的系统功能介绍常用的系统功能介绍(2)键盘输入单字符并回显(功能号:01H)这一功能调用没有入口参数,它从标准输入设备(一般默认为键盘)读入一个字符以ASCII码形式送到AL,并且将该字符送到标准输出设备(一般默认为显示器)。如果读入的是Ctrl-Break码,则退出命令,读入的内容不送AL。例如程序中需要从键盘读入一个字符,可用下面语句

42、实现:MOV AH,01H INT 21H 当上面第二条指令执行完时,系统等待键盘按键。按下任一字符时,AL中的内容即为该字符的ASCII码,同时显示器上显示出所按下的字符。(3)显示单字符(功能号:02H)这一功能调用时,系统将DL寄存器中的ASCII字符输出到显示器。例如需要显示字符“D”,可用以下指令实现:MOV DL,D;把要显示的字符送DL寄存器MOV AH,02H;功能号02H送AHINT 21H;调用系统功能显示字符D常用的系统功能介绍常用的系统功能介绍常用的系统功能介绍常用的系统功能介绍(4)显示字符串(功能号:09H)调用该功能可把内存缓冲区中的字符串输出到显示器,缓冲区中的字符串以$作为结束标志,缓冲区的首地址存放在DX。例如:.BUFF2 DB How do you do!$.MOV DX,OFFSET BUFF2 ;送字符串的首地址至DXMOV AH,09H ;送功能号INT 21H ;系统功能调用显示字符串 执行以上几条指令后,屏幕上将显示:How do you do!

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 技术资料 > 其他杂项

本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

工信部备案号:黑ICP备15003705号© 2020-2023 www.taowenge.com 淘文阁