版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、西南大学电子信息工程学院刘东卓1 4.1 汇编语言语法 计算机程序设计语言的演变 机器语言用二进制数表示的指令和数据。 例如: B91000E2FE 不直观, 很难理解和记忆,计算机只能执行机器语言。西南大学电子信息工程学院刘东卓2汇编语言 如果在上例中,每条指令的机器码用对应的“助记符”来表示:B91000MOV CX,0010HE2FE LOOP $ 并用标号或符号代替地址、常量和变量。例如: MOV CX,DATA LP1: LOOP LP1西南大学电子信息工程学院刘东卓3 所以: 汇编语言是用助记符表示指令,用标号或符号代替地址、常量和变量的符号化语言。用汇编语言编写的程序叫源程序;汇
2、编语言源程序需翻译成机器语言, 机器才能执行,这个翻译过程叫汇编。汇编语言是面向具体计算机硬件的语言,和机器密切相关。汇编语言的优缺点 缺点:可读性差,编程效率低;优点:程序代码短,执行速度快,硬件控制能力强。 实时性要求很高的程序多采用汇编语言程序。西南大学电子信息工程学院刘东卓4 高级语言 用接近人们的自然语言(英语)和数学语言的计算机程序设计语言。编程者不需对机器指令系统深入了解,稍加培训即可掌握。可读性强,功能强,独立于机器,有一定的通用性。必须编译/解释成机器语言后才能被机器所执行。 编译: 先将高级语言源程序编译成目标程序后, 再交计算机执行。 解释: 对高级语言源程序逐句进行分析
3、,边解释 边执行并立即得到运行结果。西南大学电子信息工程学院刘东卓5 汇编语言源程序的结构 源程序通常由一个或几个程序模块组成,每个模块包括数据段、堆栈段和若干代码段。例如: DSEG SEGMENT;数据段Message DB Assembly Language,$ ;显示“汇编语言”DSEG ENDSSSEG SEGMENT;堆栈段 DB 100 DUP(?)SSEG ENDS西南大学电子信息工程学院刘东卓6CSEG SEGMENT;代码段 ASSUME CS:CSEG,DS:DSEG,SS:SSEGMAIN PROC FAR;主过程START: PUSH DS ;保存程序段前缀段地址 M
4、OV AX,0 PUSH AX MOV AX,DSEG MOV DS,AX CALL DISP_SUB;调用子程序 RETMAIN ENDP西南大学电子信息工程学院刘东卓7DISP_SUB PROC NEAR;子程序 MOV DX,OFFSET Message MOV AH,09H INT 21H RETDISP_SUB ENDPCSEG ENDS END START西南大学电子信息工程学院刘东卓8由上例可知,每一语句行由4部分组成:Message DB Assembly Language,$ ;显示“汇编语言” 名字 操作码 操作数 ; 注释标号或变量,由程序员定义,由字母、数字及专用字符组
5、成, 最大长度不能超过31个, 且不能由数字打头, 不能用保留字符等)。助记符,可以是指令、伪指令或宏指令。由寄存器、存储单元、数据项或表达式构成。用“; ”作为注释开始。用来说明程序或语句的功能。西南大学电子信息工程学院刘东卓9汇编语言语句类型及格式语句分为两类: 指令性语句 是计算机可执行的,汇编后要产生机器码,其功能要机器执行时才表现出来。 标号: 指令助记符 操作数 ; 注释 START: PUSH DS ;保存程序段前缀段地址指示性语句(伪指令) 不能执行,只在汇编过程中起作用,用来定义变量,分配存储单元,指示程序开始和结束等。 变量 伪指令操作数 ; 注释Message DB As
6、sembly Language,$ ;显示“汇编语言”西南大学电子信息工程学院刘东卓10 数据项及表达式 数据项包括常量、变量、标号及表达式。(1) 常量数字常量 二进制常量,以B结尾; 十进制常量,以D结尾或省略(汇编语言中默认无标记数为十进制数); 十六进制常量,以H结尾,如0A8C6H。西南大学电子信息工程学院刘东卓11字符串常量 用引号引起来的字符或字符串也代表常数。 例如:A和BCDE,汇编时被翻译成对应的ASCII码41H和42H,43H,44H,45H。变量 变量是内存中的数据区,在程序中作为存储器操作数来使用。 如上例中 Message(在数据段中定义)西南大学电子信息工程学院
7、刘东卓12变量有三种属性:段 值变量定义所在段的段地址偏移量变量单元地址与段起始地址之间的位移量。类 型有字节、字和双字三种。标号 标号是某条指令所存放单元的符号地址,可作为转移指令或CALL指令的转移地址。 段值 总是在CS段寄存器中标号的属性 偏移量 概念与变量相同 类型 分NEAR和FAR两种西南大学电子信息工程学院刘东卓13表达式 由常数、寄存器、标号、变量与一些运算符组合的序列,分数字表达式和地址表达式两种。汇编时按一定的优先规则对表达式进行计算后可得到一个数值或一个地址。下面介绍五种运算符:算术运算符 有+、-、*、/,以及MOD等。算术运算符可以用于数字表达式例如: 19/7的商
8、是2;19 MOD 7 余5 MOV AL, 2*7;汇编后为B00E西南大学电子信息工程学院刘东卓14算术运算符也可以用于地址表达式,对地址运算的结果应有明确的物理意义。两个地址的乘或除无意义;两个地址加或减则可以。 例如:LEA SI, SUM+3 表示变量SUM的地址加上3得到的和作为新存储器地址。逻辑运算符 有AND、OR、XOR和NOT,只能用于数字表达式中。 例如:MOV CL,36H AND 0FH 经汇编后:MOV CL,06H西南大学电子信息工程学院刘东卓15 注意与逻辑操作指令相区别。例如: AND DL,PORT_VAR AND 0FEH 逻辑运算符AND在汇编时进行,
9、若PORT_VAR为81H,则汇编后表达式 值为80H; 逻辑操作指令助记符AND在程序 运行时执行,将(DL)与80H相与,结果在DL中。 (相当于执行AND DL,80H) 1000000111111110 10000000西南大学电子信息工程学院刘东卓16关系运算符有:EQ(相等),NE(不等),LT(小于),GT(大于), LE(小于或等于),GE(大于或等于) 共6个。 关系运算符的两个操作数必须都是数字或者是同一段内的两个存储器地址。 关系为真,结果为0FFFFH 关系为假,结果为0例如:MOV BX,PORT_VAL GE 5若PORT_VAL的值5,则汇编后为: MOV BX,
10、0FFFFH若PORT_VAL的值5, 则汇编后为: MOV BX,0西南大学电子信息工程学院刘东卓17属性操作符 见P129 表4.1 变量或标号的类型值例如:若ABC DW 100 DUP(?) 则:MOV DX,OFFSET ABC ;取ABC的偏移量MOV AX,SEG ABC ;取ABC的段地址MOV BL,TYPE ABC ;ABC的类型值为2MOV CL,SIZE ABC ;ABC占用的存储单元数C8HMOV CH,LENGTH ABC ;ABC的长度64H由上可知: SIZE=LENGTH*TYPE西南大学电子信息工程学院刘东卓18重定义类型操作符PTR 用来规定/修改存储单元
11、的类型。类型 PTR 地址表达式例1: MOV DI, 0 ;类型不确定MOV BYTE PTR DI, 0;字节类型 例2: STRI1 DW ? ;STRI1为字类型MOVAL,STRI1;非法MOV AL,BYTE PTR STRI1 ;合法THIS 把其后的类型属性赋给当前的存储单元,而该单元的段和偏移属性不变。 THIS 类型例如:DA_BYTE EQU THIS BYTE DA_WORD DW 20H DUP(0) 可用DA_BYTE 以字节形式访问DA_WORD字存储区。西南大学电子信息工程学院刘东卓19伪指令 自学P130-P136的内容,在程序设计中介绍相关伪指令。宏指令 是
12、由用户定义的、具有一定功能的程序段。宏定义 宏指令名 MACRO 形式参数,.(宏定义体)ENDM宏调用 宏指令名 实际参数宏定义中的标号和变量 LOCAL 参数表标号/变量宏展开后依次用?0000,?0001,等表示。西南大学电子信息工程学院刘东卓20例1:教材P136 例4.2其中: 有3个形式参数的移位宏定义SHIFT MACRO N, REG, CC MOV CL, N S&CC REG, CL ENDM 宏调用:SHIFT 4,AX,AL宏展开: SHIFT 4,AX,AL1 MOV CL,41 SAL AX,CL西南大学电子信息工程学院刘东卓21例2:教材P138 例4.3 主要看
13、LOCAL的作用。注意:宏可以嵌套(P138 4.宏嵌套);宏调用与过程(子程序)调用的差别是:宏指令由宏汇编程序MASM在汇编过理中进行处理,而调用指令CALL和返回指令RET则是CPU指令。宏指令简化了源程序,但不能简化目标程序,并不节省内存单元;但减少了执行CALL和RET指令的时间(P139例题)西南大学电子信息工程学院刘东卓224.2 汇编语言程序设计编写汇编语言程序的步骤(1)根据实际问题抽象出数学模型(2)确定解决此数学模型的算法(3)画出程序框图(流程图) (4)分配内存工作单元和寄存器(5)根据框图编制程序(6)上机调试,进行修改(汇编、链接)西南大学电子信息工程学院刘东卓2
14、3绘制程序框图的常用符号(1)起始和终止框 (2)工作框判断框调用子程序框连接框程序走向箭头举例见下页西南大学电子信息工程学院刘东卓24 汇编语言上机过程 编辑程序(行编辑/屏幕编辑)产生(*.ASM)汇编语言源程序文件 汇编程序将(*.ASM)汇编生成(*.OBJ)文件 连接程序(LINK)将(*.OBJ)连接生成(*.EXE)文件 功能测试DEBUG调试结束YY修改源程序N有错?Y汇编语言上机开始有错?正常?有错?西南大学电子信息工程学院刘东卓25 程序设计举例顺序程序设计 程序的执行过程,严格按照指令的先后顺序进行。例如:求 见P143例4.5源程序:DATA SEGMENTVARX D
15、W 6VARY DW 7VARZ DW 8RESULT DW ?DATA ENDS (X+Y)*8-ZW= 2西南大学电子信息工程学院刘东卓26STACK1 SEGMENT PARA STACKDB 10 DUP(?)STACK1 ENDSCOSEG SEGMENTPROC1 PROC FARASSUME CS:COSEG,DS:DATA,SS:STACK1START:PUSH DS;保存程序段前缀地址MOV AX,0PUSH AXMOV AX,DATA;加载用户数据段地址MOV DS,AX西南大学电子信息工程学院刘东卓27 MOV DX,VARX;XDXADD DX,VARY;(X+Y)DX
16、MOV CL,3 SAL DX,CL;(X+Y)*8DXSUB DX,VARZ;(X+Y)*8-ZDXSAR DX,1;(X+Y)*8-Z)/2DXMOV RESULT,DX;保存结果RETPROC1 ENDPCOSEG ENDS END START西南大学电子信息工程学院刘东卓28分支程序设计 用条件转移指令实现程序分支,根据选用的条件不同,基本的分支结构有:IF_THEN结构 IF_THEN_ELSE结构 CASE结构 条件满足?处理NY标号条件满足?处理1NY标号2条件满足?处理2处理2标号1处理n处理1西南大学电子信息工程学院刘东卓29 例如:P146例4.7 求补码数X补的绝对值,并
17、送回原处。 根据补码的定义: X0 X0 可得如下关系式: X0 X0 西南大学电子信息工程学院刘东卓30根据上式可画出程序流程图:西南大学电子信息工程学院刘东卓31程序: STACK1 SEGMENT STACK DB 10 DUP (?); 堆栈段,预留10个单元 STACK1 ENDS DATA SEGMENT X DW 8326H ;设X补=8326H DATA ENDS CODE SEGMENT MAIN PROC FAR ASSUME CS:CODE,DS:DATA,SS:STACK1START:MOV AX, DATA MOV DS, AX 西南大学电子信息工程学院刘东卓32MO
18、V AX, X ;取x补到AX。AND AX, AX ;设置标志位。JNS DONE ;若x0, 转DONE。NEG AX ;若0, 求补得到|x|。DONE: MOV X, AX ;将|x|送回原处。 MOV AH,4CH INT 21HCODE ENDS END START 西南大学电子信息工程学院刘东卓33循环程序设计具有多次重复操作,有2种典型循环程序结构:WHILE_DO结构 DO-UNTIL结构 初始化循环控制循环体初始化循环控制循环体继续循环?继续循环?YYNN西南大学电子信息工程学院刘东卓34例如:P149 例4.9 数组求和。 DATA SEGMENT ARY DW 12H,
19、34H,56H,78H COUNT DW 4 SUM DW 2 DUP(?) DATA ENDS STACK1 SEGMENT STACK DB 20 DUP(?) STACK1 ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA,SS:STACK1西南大学电子信息工程学院刘东卓35START:MOV AX,DATA MOV DS, AX LEA SI,ARY;取ARY的有效地址MOV CX,COUNT;数组元素个数送CXXOR AX,AXMOV DX,AXAGAIN:ADD AX,SI;累加N个元素的低位字JNC NEXTINC DX;有进位,则和的高位字加1
20、NEXT:ADD SI,2;修改地址指针LOOP AGAINMOV SUM,AX ;存求和结果西南大学电子信息工程学院刘东卓36MOV SUM2,DXMOV AH,4CH;返回操作系统INT 21HCODE ENDS END START西南大学电子信息工程学院刘东卓37子程序(过程)设计 过程的定义和调用当过程和主程序在同一代码段时CSEG SEGMENTMAIN PROC FAR CALL SUBT RETMAIN ENDPSUBT PROC NEAR RETSUBT ENDPCSEG ENDS 西南大学电子信息工程学院刘东卓38当过程和主程序不在一个代码段时XSEG SEGMENT SUB
21、T1 PROC FAR RET SUBT1 ENDP CALL SUBT1;段内调用 XSEG ENDSYSEG SEGMENT CALL SUBT1;段间调用 YSEG ENDS 西南大学电子信息工程学院刘东卓39主程序和过程间的参数传送 通过CPU内部寄存器传送参数例如P154例4.12: 将4位十六进制ASCII码转换为等值二进制数。入口参数: 4位十六进制ASCII码的内存首地址ASC_STG送入DS:SI中,ASCII的位数4存放在CL中。出口参数: 转换结果存放在DX中。 程序如下:ASC_BIN PROC NEAR PUSH AX MOV CH,CL;ASCII码位数送CH中 C
22、LD西南大学电子信息工程学院刘东卓40 XOR AX,AXMOV DX,AXAGAIN:LODSB;取数AND AL,7FHCMP AL,9JG ATOFSUB AL,30HJMP SHORT ROTATEATOF:SUB AL,37HROTATE:OR DL,ALROR DX,CLDEC CHJNZ AGAINPOP AXRETASC_BIN ENDP西南大学电子信息工程学院刘东卓41通过内存单元(变量)传递参数例如:P155例4.13 在主程序中调用数组求和子程序 DSEG SEGMENT;数据段 ARY DW 100 DUP (?) COUNT DW ? SUM DW 2 DUP (?)
23、DSEG ENDSCSEG SEGMENT;代码段 CALL PROADD 西南大学电子信息工程学院刘东卓42数组求和子程序:PROADD PROC NEAR PUSH AX PUSH CX PUSH DX PUSH SI LEA SI, ARY MOV CX, COUNT XOR AX, AX MOV DX, AXAGAIN: ADD AX, SI ;累加N个元素的低位字。 西南大学电子信息工程学院刘东卓43 JNC NEXT INC DX ;若有进位,则和的高位字加1。 NEXT: ADD SI, 2 LOOP AGAIN MOV SUM, AX MOV SUM2, DX POP SI P
24、OP DX POP CX POP AX RET PROADD ENDP CSEG ENDS 西南大学电子信息工程学院刘东卓44 通过地址表传送变量地址 DSEG SEGMENT ARY1 DW 100 DUP (?) COUNT1 DW ? SUM1 DW 2 DUP (?) NUM DW 100 DUP (?) N DW ? TOTAL DW 2 DUP (?) TABLE DW 3 DUP (?) DSEG ENDS西南大学电子信息工程学院刘东卓45STACK SEGMENT DB 100 DUP (?)STACK ENDSCSEG SEGMENT MOV AX, DSEG MOV DS,
25、 AX MOV TABLE, OFFSET ARY1 ;装填地址表。 MOV TABLE 2, OFFSET COUNT1 MOV TABLE 4, OFFSET SUM1 MOV BX, OFFSET TABLE ;表地址存入BX。 CALL NEAR PTR PROADD ;求数值ARY1的和。西南大学电子信息工程学院刘东卓46 MOV TABLE, OFFSET NUM ;重新建立地址表。MOV TABLE 2, OFFSET NMOV TABLE 4, OFFSET TOTALLEA BX, TABLECALL NEAR PTR PROADD ;求数组NUM的和。 PROADD PRO
26、C NEAR PUSH AX PUSH DX PUSH CX PUSH SI PUSH DI西南大学电子信息工程学院刘东卓47 MOV SI,BX ;取数组地址。 MOV DI, BX+2 ;取元素个数, 并送入CX。 MOV CX, DI MOV DI, BX+4 ;取和数地址。 XOR AX, AX MOV DX, AX NEXT: ADD AX, SI JNC NO-CARRY INC DXNO-CARRY: ADD SI,2西南大学电子信息工程学院刘东卓48 LOOP NEXT MOV DI, AX MOV DI+2, DX POP DI POP SI POP CX POP DX PO
27、P AX RET PROADD ENDP CSEG ENDS 西南大学电子信息工程学院刘东卓49 通过堆栈传送参数或参数地址CSEG SEGMENT MOV BX, OFFSET ARY1 ;参数地址压入堆栈。 PUSH BX MOV BX, OFFSET COUNT1 PUSH BX MOV BX, OFFSET SUM1 PUSH BX CALL NEAR PTR PROADD MOV BX, OFFSET NUM ;参数地址压入堆栈。西南大学电子信息工程学院刘东卓50PUSH BXMOV BX, OFFSET NPUSH BXMOV BX, OFFSET TOTALPUSH BXCALL
28、 NEAR PTR PROADDPROADD PROC NEAR PUSH BP MOV BP, SP ;采用BP访问参数地址。 PUSH AX PUSH DX PUSH CX西南大学电子信息工程学院刘东卓51PUSH SIPUSH DI MOV SI,BP+8 ;取数组地址。MOV DI,BP+6 ;取计数值地址。MOV CX,DI ;计数值送CX。MOV DI,BX+4 ;和数地址送DI。XOR AX, AX ;AX及DX清零。MOV DX, AXNEXT: ADD AX, SI JNC NO_CARRY INC DXNO_CARRY: ADD SI, 2 LOOP NEXT西南大学电子信
29、息工程学院刘东卓52MOV DI, AXMOV DI+2, DXPOP DIPOP SIPOP CXPOP DXPOP AXPOP BPRET 6 PROADD ENDP CSEG ENDS 西南大学电子信息工程学院刘东卓53PROADD子程序执行时的堆栈内容 西南大学电子信息工程学院刘东卓54 过程的嵌套、 递归调用和可重入性 过程的嵌套 一个过程又去调用其它过程。 嵌套层次没有限制,只要堆栈空间允许即可。但要注意寄存器内容的保护和恢复,以免发生冲突。 递归调用 一个过程又调用该过程自身。 西南大学电子信息工程学院刘东卓55汇编语言和PC-DOS的接口程序段前缀PSP程序终止退出指令INT
30、20可用的内存空间高端段地址保留DOS系统功能远调用入口程序结束处理中断向量原内容Ctrl_C处理中断向量原内容严重错误处理中断向量原内容保留环境块段地址保留格式化未打开的文件控制块1格式化未打开的文件控制块2(当+5C的文件控制块1被打开时,此字段被全部覆盖)未格式化的参数区(+80字节含有存放的参数长度或缺省的磁盘传输区)PSP+0 +2 +4 +5 +0A +0E +12 +16 +2C +2E +5C +6C +80西南大学电子信息工程学院刘东卓56PC-DOS对内存的分配西南大学电子信息工程学院刘东卓57返回PC-DOS的方法方法1:方法2:EXP1 PROC FAR EXP1 PR
31、OC FARSTART:PUSH DS START:MOV AX,DATA MOV AX,0 PUSH AX MOV AX,4C00H MOV AX,DATA INT 21H EXP1 ENDP RETEXP1ENDP西南大学电子信息工程学院刘东卓584.4 DOS及BIOS功能调用 系统软件中提供的功能调用,有 DOS及BIOS功能调用两种, 用户程序在调用这些系统服务程序时,不是用CALL命令,而是采用软中断指令INT n来实现。硬件中断占用BIOS功能调用DOS功能调用用户程序使用00H0FH10H1FH20H3FH40HFFH西南大学电子信息工程学院刘东卓59INT 2lH功能大致可以
32、分为四个方面:设备管理、目录管理、文件管理和其它。参见P183-P188, 表4.6-表4.14。中断号功能中断号功能20H终止程序26H按逻辑扇区写磁盘21H有00-89H个子功能27H终止并保持驻留22H程序终止地址28HDOS空闲中断23HControl-c或break处理29H快速控制台输出24H严重错误处理2EH传送命令到执行25H按逻辑扇区读磁盘2FH有多种子功能 DOS (Disk Opration System)功能调用(高级调用)西南大学电子信息工程学院刘东卓60DOS系统功能调用方法: AH子功能号; 在其它寄存器中放入该功能所要求的入口参数; 执行INT 21H指令; 分析出口参数。举例: INT 21H的几个最常用功能简介 DOS键盘功能调用 单字符输入并回显在屏幕上入口参数:AH=01;功能调用号返回参数:AL=输入字符西南大学电子信
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广西壮族自治区崇左市江州区驮卢中学2026-2027学年九年级上学期9月阶段检测语文试题(含答案)
- 食醋醋酸发酵工岗位技能考试试卷及答案
- 桑园养蚕工岗位技能考试试卷及答案
- 橡胶栽培工安全宣教评优考核试卷含答案
- 耐蚀衬胶工岗前工作效率考核试卷含答案
- 井下出矿工岗前实操知识水平考核试卷含答案
- 熔融纺纺丝操作工岗前品牌建设考核试卷含答案
- 印染烧毛工安全教育考核试卷含答案
- 铁合金原料加工工岗前基础晋升考核试卷含答案
- 2026年生物质能生物燃料生产技术创新应用试题及答案
- 2026年陕西英语单招模拟试题及答案详解
- 2026年商法自考试题及答案
- 钢栈桥安全技术交底记录培训课件
- 2026重庆科瑞南海制药有限责任公司招聘15人笔试备考题库及答案详解
- 福建南安市文体旅运营管理有限公司招聘笔试题库2026
- 专科儿科护理学试题及答案(完整版供参考)
- 2026年6月大学英语四级考试真题(第1套)
- 结构加固(增大截面、粘钢、碳纤维)专项施工方案
- 2026杭州市市级机关事业单位招聘编外人员综合基础知识和综合应用试题附答案
- 大学英语四级词汇表 (完美打印版)
- 2026年青少年心理健康教育手册及测试卷及答案
评论
0/150
提交评论