工业用微型计算机朱岩课后题,自考朱岩-工业用微型计算机第3章-汇编语言程序设计ppt课件.ppt...

《自考朱岩-工业用微型计算机第3章-汇编语言程序设计ppt课件.ppt》由会员分享,提供在线免费全文阅读可下载,此文档格式为ppt,更多相关《自考朱岩-工业用微型计算机第3章-汇编语言程序设计ppt课件.ppt》文档请在天天文库搜索。

1、工业用微型计算机全国高等教育自学考试指定教材 机械制造及其自动化 机电一体化工程专业 (独立本科段) 主编:朱岩13.1 程序设计语言概述3.2 汇编语言程序的基本结构 3.3 常用伪操作 3.4 汇编语言程序的设计方法与设计举例第3章 汇编语言程序设计2类别伪操作名格式功能段定义伪操作SEGMENT段名 SEGMENT[定位类型]定义一个逻辑段  [组合类型][‘类别’]ENDS……… 段名 ENDSASSUMEASSUME 段寄存器名:段段名设定逻辑段段址所在的段寄存器ORGORG 表达式将地址计数器置为表达式的值数据定义伪操作DB[变量名] DB 操作数[,……]定义字节变量DW[变量名] DW 操作数[,……]定义字(2字节)变量DD[变量名] DD 操作数[,……]定义双字(4字节)变量DQ[变量名] DQ 操作数[,……]定义四字(8字节)变量DT[变量名] DT 操作数[,…。

2、…]定义十字节(10字节)变量3类别伪操作名格式功能符号定义伪操作EQU名字 EQU 表达式给名字赋值 =名字 = 表达式同上,但允许重复赋值LABEL名字 LABEL 表达式定义变量或标号的类型过程定义伪操作PROC过程名 PROC [NEAR/FAR]定义一个过程………ENDP过程名 ENDP模块定义与连接伪操作NAMENAME 模块名指定模块名ENDEND [标号]表示源程序结束PUBLICPUBLIC 符号[,……]说明本模块中的公共符号EXTRNEXTRN 名字:类型[,……]说明本模块中所用外部符号43.1 程序设计语言概述1.机器语言2.汇编语言3.高级语言1、汇编语言的分段结构:3.2 汇编语言程序的基本结构5标号/名字的命名 约定: 最长31个字符 第一个字符不能是数字 ? $ _ @可出现在标号的任意位置,但? $不能单独使用 . 只能出现在起始位置 一个程序中,每个标。

3、识符的定义是唯一的,且不能与任何保留字相同字母:A ~ Z ; 数字:0 ~ 9 ; 特殊字符:?、· 、@、_、$ 。保留字是一个汇编语言中预先保留下来的具有特殊含义的符号,只能作为固定的用途。凡是8086的指令、伪指令、寄存器名等都是保留字。 6在指令语句中,名字称为标号。指令语句中的标号实质上是指令的符号地址。标号有三种属性:段、偏移量和类型1.标号NEXT: MOV AX,1234H ;AX←1234H7用指示语句定义变量时,汇编语言中名字部分就是变量名。数据存放在存储器中要占一定内存空间,称这个被占用的内存空间为变量。而变量名就是给所占用内存空间起的名字。变量有三种属性:段、偏移量和类型。2.变量名VAR DB 41H,42H,43H,44H ;四个原始数据8算术运算符逻辑运算符关系运算符分析运算符属性运算符+(加法)AND(与)EQ(相等)TYPEPTR-(减法)OR(或)NE。

4、(不等)LENGTHTHIS*(乘法)XOR(异或)LT(小于)SIZESHORT/(除法)NOT(非)GT(大于)OFFSETHIGHMOD(求余)LE(小于等于)SEGLOWGE(大于等于):3.表达式汇编语句中的表达式分为两种:数值表达式和地址表达式。数值表达式产生一个数值结果。地址表达式的结果是存储器的地址。表达式中常用的运算符有以下几种:94)分析运算符①OFFSET运算符:利用运算符OFFSET可以得到一个标号或变量的偏移量。使用格式:OFFSET 变量名或标号名②SEG运算符:利用运算符SEG可以得到一个标号或变量的段基址格式: SEG 变量名或标号名 10 PTR的应用场合主要有两处:一种情况是当要访问的存储单元的类型不确定时,可以用PTR明确指明要访问的存储单元的类型。如: MOV [BX],10H MOV BYTE PTR[BX],10HBXBXMOV WORD PTR。

5、[BX],10H 10H10H 00H③PTR运算符:用来指定存储器操作数的类型。 11 PTR合成运算符的另一种应用场合是当要引用的标号类型和定义类型不一致时,可以用PTR临时改变标号的类型为我们所需要的类型。 如:A1 DB 10H,20H MOV AX,A1 MOV AX,WORD PTR A1 该修改是临时的,只在当前语句有效123.3 常用伪操作伪指令: 不是CPU执行的指令,而是程序员给编译程序下达的命令。 是在编译源程序期间由编译程序执行的命令。 定义数据、分配存储区、定义段、定义过程伪指令语句:在汇编时不产生二进制代码,仅为编译程序提供汇编时所需要的信息的语句。133.3.1 段定义伪操作程序的段结构段定义段寻址(指定当前段)段寄存器的装入常用的伪操作有SEGMENT、ENDS和ASSUME14类别伪操作名格式功能段定义伪操作SEGMENT段名 SEGMENT[定位类型]定。

6、义一个逻辑段  [组合类型][‘类别’]ENDS……… 段名 ENDSASSUMEASSUME 段寄存器名:段段名设定逻辑段段址所在的段寄存器ORGORG 表达式将地址计数器置为表达式的值15DATA SEGMENT ┇DATA ENDSSTACK SEGMENT STACK ┇STACK ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACKBEGIN: MOV AX,DATA MOV DS,AX MOV ES,AX MOV AX,STACK MOV SS,AX …… CODE ENDS END BEGIN ;指明程序入口,结束汇编 16类别伪操作名格式功能数据定义伪操作DB[变量名] DB 操作数[,……]定义字节变量DW[变量名] DW 操作数[,……]定义字(2字节)变量DD[变量名] DD 操作数[,……]定义双字(4字节。

7、)变量DQ[变量名] DQ 操作数[,……]定义四字(8字节)变量DT[变量名] DT 操作数[,……]定义十字节(10字节)变量17主要包括下列几种:DB(Define Byte):定义字节,后面的每个操作数占1个字节。DW(Define Word):定义字,后面的每个操作数占1个字。DD(Define DWord):定义双字,后面的每个操作数占2个字。DQ(Define QWord):定义四字,后面的每个操作数占4个字。DT(Define Tbyte):定义十字节,后面的每个操作数占10个字节。3.3.2 数据定义伪操作 [变量名] 变量定义符 操作数[,…,操作数] 18字节量数据(Byte-sized)1)DB定义8位、字节量变量数据无符号整数0~255补码表示的有符号整数:-128~+127一个字符(ASCII码值)压缩BCD码:0~99非压缩BCD码:0~9……字符串定义使用字。

8、节变量定义DB DATA1 DB 50H,52H52H50HDATA119字变量数据2)DW定义16位、字量变量数据包含高低两个字节,16位无符号和有符号整数16位段地址,16位偏移地址占用2个连续的字节存储单元34H56HDATA2DATA2 DW 3456H20?表达式 ●这是为数据项分配存储单元的一种方法,只是存储单元中不预置确定的值,常用来预留存储单元,存放程序的中间结果或最终结果。RESULT DB ? ;预置一个字节单元,其值不定重复定义子句DUP●利用重复定义子句DUP可以为若干个重复数据分配存储单元。带DUP的表达式格式如下: n DUP (表达式)●其中圆括号内的表达式是重复的内容,n 是重复次数。21类别伪操作名格式功能符号定义伪操作EQU名字 EQU 表达式给名字赋值 =名字 = 表达式同上,但允许重复赋值LABEL名字 LABEL 表达式定义变量或标号的类型3.3.。

9、3 符号定义伪操作221. EQU伪操作 EQU伪操作就表达式的值赋予一个名字。在程序中,凡是出现该符号的地方,汇编时均用其值代替,如: CR EQU 0DH ;常数 LF EQU 0AH ;常数 ABL EQU ASCII_TABLE ;变量 STR EQU 64*1024 ;数值表达式 ADR EQU ES:[BX+SI+5] ;地址表达式 CBD EQU AAM ;指令助记符需要注意的是,一个符号一经EQU伪操作赋值后,在整个程序中,不允许再对同一个符号重新定义。 名字 EQU 表达式232. =(等号)伪操作 “=”伪操作的功能与EQU相似,主要区别在于它可以对同一个名字重复定义,如: COUNT = 10 MOV CX,COUNT ;CX←10 ... COUNT=COUNT-1 MOV BX,COUNT ;BX←9名字 = 表达式243. LABEL伪操作定义标号或变量的类型。。

10、 变量的类型可以是BYTE、WORD、DWORD 或结构名、过程名; 标号的类型可以是NEAR或FAR。如: 名字 LABEL 类型AREAW LABEL WORDAREAB DB 100 DUP(?) ... MOV AREAW,AX ... MOV AREAB[29],ALAGAINF LABEL FARAGAIN: PUSH BX25类别伪操作名格式功能过程定义伪操作PROC过程名 PROC [NEAR/FAR]定义一个过程………ENDP过程名 ENDP26格式: 过程名 PROC [NEAR / FAR] ┇ } 过程体 RET 过程名 ENDP功能:完成过程定义,在过程体中实现过程的操作功能 3.3.4 过程定义伪操作过程名是过程入口的符号地址27当主程序调用过程时,使用CALL指令。(1)主程序调用过程 CALL 过程名 CALL负责将断点压栈,并转向过程入口。(2)子程序返回。

11、 过程返回主程序时用RET或RET n。28代码段名 SEGMENT过程名1 PROC FAR …… RET过程名1 ENDP过程名2 PROC NEAR …… RET过程名2 ENDP…………代码段名 ENDSNAME1 PROC FAR ┆ CALL NAME2 ┆ RET NAME2 PROC NEAR ┆ RET NAME2 ENDPNAME1 ENDP 过程的定义和调用均可嵌套29————————————CALL PPP——————————————————PPP PROC NEAR MOV AX,1234H RET PPP ENDP30类别伪操作名格式功能模块定义与连接伪操作NAMENAME 模块名指定模块名ENDEND [标号]表示源程序结束PUBLICPUBLIC 符号[,……]说明本模块中的公共符号EXTRNEXTRN 名字:类型[,……]说明本模块中所用外部符号3.3.5。

12、模块定义与连接伪操作START: MOV AX,DATA ┇ END START313.4.2循环与分支程序的设计基本结构有:顺序结构 循环结构 选择结构(分支结构) 子程序 32程序的的基本结构顺序结构分支结构循环结构abc…def33寄存器传递变量传递地址表传递堆栈传递参数传递的方法341. 设置功能号AH2. 置入口参数3. 执行INT 21H 4. 分析出口参数注意:使用时保存好AH寄存器的内容(2) DOS系统功能调用INT 21H2. DOS软中断及系统功能调用351)键盘输入(1号调用)● 格式: MOV AH,1 INT 21H● 功能:等待从键盘输入一个字符→AL,同时将此字符在屏幕上显示出来。说明:系统执行该功能调用时将等待键盘输入,一旦按键,就将其字符的ASCII码读入,首先检查是否是〈CTRL〉+〈Break〉,若是,则从本调用的执行中退出;否则,将ASCII码→。

13、AL,同时将该字符送显示器显示。 362)显示器输出 2号功能显示一个字符● 格式: MOV DL,待显示字符的ASCII码 MOV AH,2 INT 21H● 功能:将DL中的字符送显示器显示,若DL中为〈CTRL〉+〈Break〉的ASCII码,则从本调用的执行中退出。例如:MOV DL,0AH MOV AH,2 输出换行符 INT 21H37 3)9号功能输出字符串●格式: LEA DX,字符串首址偏移地址 MOV AH,9 INT 21H●功能:将当前数据段中指定的(DS:DX)字符串输出(该字符串必须以‘$’为结束符,且字符’$’不输出)38 MOV AH,4CH INT 21H4)程序终止39编辑文本编辑器,如 EDIT.COM源程序:文件名.asm汇编汇编程序,如 MASM.EXE目标模块:文件名.obj连接连接程序,如 LINK.EXE可执行文件:文件名.exe调试调试程序。

14、,如 DEBUG.EXE应用程序错误错误错误错误汇编语言程序的开发过程402011-31. 有程序如下: BUF DW 5,6,1,9,8,2VAR DW 0COUNT EQU 6START: MOV SI,OFFSET BUF MOV CX,COUNT MOV AX,[SI]NEXT: CMP AX,[SI] JB FORWORD MOV AX,[SI]FORWORD: INC SI INC SI LOOP NEXT MOV VAR,AX程序执行后变量VAR的值为 ;程序功能是 。 1(或0001H)求一组数据中的最小值412011-32.有程序段如下: MOV AL,96H MOV DL,AL MOV DH,AL AND DL,0FH MOV CL,4 SHR DH,CL 程序执行后DH=________________,DL= ____________, AL=___________。

15、_____,CL=________________。9(或9H)6(或6H)96H4(或4H)422011-33. 有程序如下: MOV AH,0F0H MOV AL,0 CMP AH,AL JL MINUS MOV DH,1 JMP FINISH MINUS: MOV DH,0FFH FINISH: 程序执行后,AH=______________,AL=______________, DH=______________,ZF=______________.F0H0H(或0)FFH0432011-34.有程序段如下: X DB ? Y DB ? MOV AX,0102H MOV WORD PTR X,AX MOV BH,X MOV BL,Y程序运行后,AH= _______________ AL=_______________ BH= _______________ BL=________。

16、_______01H(或1)02H(或2)02H(或2)01H(或1)442011-35. 有程序如下: ARRAY DB 0,1,2,3,4,5,6,7,8,9SUM DB ?COUNT EQU 10 MOV SI,OFFSET ARRAY MOV CX,COUNT XOR DL,DLNEXT: ADD DL,[SI] INC SI LOOP NEXT MOV SUM,DL 程序执行后,SUM= ____________,CX= ________45(或2DH)0H(或0)452011-36. 有程序如下: MOV AL,7EH MOV BL,5BH ADD AL,BL程序运行后,AL= ______________ OF=______________ SF= ______________ CF=______________D9H110462011-37.设有一字符串‘scanning 。

17、for the letter X’,要寻找字符‘X’所在的位置,填写下列程序完成上述功能。DTS SEGMENTSTR DB ‘scanning for the letter X’LEN EQU $-STR ;字符串长度POS DB 0 ;存放字符‘X’所在位置DTS ENDSSTS SEGMENT STACK DB 100 DUP(?)STS ENDS47CDS SEGMENT ASSUME CS:CDS,DS:DTS,SS:STSMAIN: MOV AX,DTS MOV ________ ,AX MOV SI,OFFSET ________ ;SI指向字符串首地址 MOV CX, ________ ;置CX为字符串长度 MOV AL,’X’ ;置AL为待查找的字符‘X’ MOV AH,0 ;置AH为待查找字符所在位置,初始为0NEXT: CMP ________ ,AL ;所取的字符是。

18、否为‘X’ JE ________ ;是,则退出循环 INC ________ ;;更新待查找字符所在位置 LOOP NEXT否则,SI指向下一个字符 INC AH ;未处理完,则继续FOUND: MOV ________ ,AH ;保存待查找字符所在位置 MOV AH,4CH ;返回系统 INT 21HCDS ENDSEND ________ ;指明程序入口,结束汇编 DSSTRLEN[SI]FOUNDSIPOSMAIN482012-31. 有程序段如下: MOV BX,OFFSET X MOV AL,[BX][6] MOV AH,[BX][7] MOV SI,4 MOV DL,[BX][SI][2] MOV DH,[BX][SI][3]X DB 1,2,3,4,5,6,7,8执行该程序段后,AL =______________ ,AH =______________ ,DL =____。

19、__________ ,DH =______________07H(或7)08H(或8)07H(或7)08H(或8)492012-32.有程序段如下: VAR1 DW 0010H VAR2 DW 0020H MOV AX,VAR1 MOV BX,VAR2 PUSH AX PUSH BX POP AX POP BX MOV VAR1,AX MOV VAR2,BX ........执行该程序段后,VAR1=______________, VAR2=______________ 0020H0010H502012-33.有程序段如下: X DB 0AH,0BH,0CH,0DHY DB 10H,20H,30H,40HZ DB 4 DUP(?)........ MOV BX,OFFSET X MOV SI,OFFSET Y MOV DI,OFFSET Z MOV CX,4 CLCL1:MOV AL,[。

20、BX] ADC AL,[SI] MOV [DI],AL INC BX INC SI INC DI LOOP L1执行该程序段后,变量Z的首字节为______________,该程序的功能是____________________________。 1AH实现32位加法运算(或Z=X+Y)512012-34.有程序段如下: MOV AL,’9’ SUB AL,’0’ MOV BL,35H AND BL,0FH MOV CL,4 SHL AL,CL OR AL,BL执行该程序段后,AL= ______________ BL=______________ 95H05H522012-35. 有程序段如下: MOV SI,OFFSET BUF MOV AL,[SI] INC SI L1: ADD AL,[SI] L2: ADD AL,1 BUF DB 69H,96H 语句L1执行完成后,CF=___。

21、________,ZF=___________,语句L2执行完成后,CF=___________,ZF=___________。 0011532012-36. 有程序段如下: VAR DB ‘A’ MOV CX,8 NEXT: ROL VAR,1 MOV DL,VAR AND DL,1 ADD DL,30H MOV AH,2 INT 21H LOOP NEXT执行该程序段后,屏幕显示______________ , VAR= ______________。01000001‘A’(或41H或01000001B)542012-37.已知10个无符号数0,1,2,3,4,5,6,7,8,9,查找其中的最大值,请填写下列程序以完成上述功能。DTS SEGMENTDATA DB 0,1,2,3,4,5,6,7,8,9MAX DB ?DTS ENDSSTS SEGMENT STACK DB 100 D。

22、UP(?)STS ENDS55CDS SEGMENT ASSUME CS:CDS,DS:DTS,SS:STSMAIN: MOV ________,DTS MOV ________ , AX LEA SI, ________ ;SI指向数据块首地址 MOV CX,10 ;置CX为数据块中数据的个数 CLD ;置DF=0,使SI递增 LODSB ;取第一个数据 MOV MAX,AL ;存当前最大值 DEC _______ ;递减已处理数据的数量NEXT: LODSB ;取一个新数据 CMP AL,MAX ;新数据与当前最大值作比较 ________ OVER ;新数据小于当前最大值 MOV ________ ,AL ;新数据作为当前最大值OVER: LOOP ________ ;未处理完,则继续 MOV AH,4CH INT 21HCDS ENDS END ________ ;指明程序入口,结束汇编 AXDSDATACXJBMAXNEXTMAIN56。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值