1、4-2-1 汇编语言源程序实例zlgc2,exmp1例1:把内存中从STRING开始的字符串传送到BLOCK开始的内存区域去DAT1 SEGMENTSTRING DB ABCD1234NUM EQU $-STRINGDAT1 ENDS伪指令语句DAT2 SEGMENTBLOCK DB 50 DUP(?)DAT2 ENDSCOD SEGMENT ASSUME CS:COD,DS:DAT1,ES:DAT2START: MOV AX,DAT1 MOV DS,AX指令语句 MOV AX,SEG BLOCK MOV ES,AX MOV CX,NUM LEA SI,STRING MOV DI,OFFSET
2、 BLOCKLP: MOV AL,SI MOV ES:DI,AL INC SI INC DI LOOP LP MOV AH,4CH INT 21HCOD ENDSEND START汇编语言语句种类指令语句、伪指令语句、宏指令语句1) 指令语句由指令系统中有的指令构成。它指示CPU执行某种操作。该指令语句汇编后将产生目标代码。2) 伪指令语句属于说明性语句。仅在汇编过程中起汇编管理和说明的作用,不产生目标代码。实验二 指令观察4-2-2伪指令语句格式:名字 伪操作指令 参数表 ;注释1、段定义伪指令 1)段定义伪指令段名 SEGMENT 段名 ENDS 用于定义源程序的各个逻辑段。如:代码段、数
3、据段、堆栈段等。 SEGMENT/ ENDS必须成对出现,并且段名不能省略。 2)ASSUME假设伪指令 ASSUME 段寄存器名:段名 ;段寄存器名:段名 ;假设,用XX段寄存器指示XX逻辑段(段名)。用于汇编程序计算标号和变量的段内地址和物理地址。但是并没有实际装填相应段寄存器。段寄存器的内容还需要执行指令装填。2、数据定义伪指令(weizlgc.asm)BYT1 DB 12H,12,34H,34,56H, ,BYT2 DB ABCD1234 ?+-*/$WRD DW AB,12,34H,1234HSDRE DB 8 DUP(20H)DWRD DD 12H,1234H,12345678H,
4、0QNUM DQ 123H,456HTNUM DT 1234H,5678H数据定义伪指令用来定义内存操作数(变量)。伪指令语句的名字称为变量名,它代表其右第1个内存变量。变量名有三个属性:段地址、偏移地址、数据类型。段地址SEGMENT BASE段内偏移量OFFSET类型TYPE数据类型指该变量所占字节数。如上:BYT1的类型值为1,WRD的类型值为2,DWRD的类型值为4,QNUM的类型值为8,TNUM的类型值为10等。3、符号定义伪指令EQU ,weizlgc 名字 EQU 表达式 ;把表达式的值赋给名字LEN EQU $-DWRD NUM EQU 3+5$-DWRD和3+5 称为表达式。
5、表达式中的各个元素必须有具体值定义,也就是说,在源程序中就能计算出表达式的具体数值。 $程序汇编计数器。用来统计汇编过程中已分配的内存单元字节数。4、 类型定义伪指令LABEL给变量或标号定义类型,如变量名 LABEL BYTE/WORD/DWORD标号名 LABEL FAR/NEAR5、 END结束汇编伪指令结束汇编命令。汇编程序遇见此伪指令就结束汇编过程。因此,END应该是源程序的最后一条指令。其后的所有信息都将被汇编程序忽略。 END 标号 此处的“标号”应该指向程序运行的第一条指令,即表示第一条指令所在地址。操作系统OS 会自动将该“标号”的逻辑地址装入CS:IP中。5、过程定义伪指令
6、过程名 PROC FAR/NEAR ; 。 指令序列过程名 ENDP 过程,即子程序,分为外部过程和内部过程。外部过程主程序和过程不在同一源程序文件中。其属性为FAR;内部过程主程序和过程同在一个源程序文件中。又分为段间FAR过程和段内NEAR过程。4-2-3 指令语句1、指令语句格式 标号: 前缀 指令助记符 操作数表 ;2、标号标号的作用标号代表“:”后面指令所在内存地址,供程序控制类指令作为转移目标用。标号的属性:标号有三个属性:类型TYPE 远FAR供段间转移 近NEAR供段内转移 标号的组成字母数字组成,以字母开头,最多8个字符。不可使用8086/8保留字,如指令和伪指令助记符、寄存
7、器名、运算操作符等。标号的定义例如:NEXT: ADD AX,BX ;定义NEXT为近标号ABC LABEL FAR ;定义ABC为与远标号 MOV DX,BXF2 PROC FAR ;定义F2为远过程名,也可作标号用标号的使用在循环和条件转移指令中只能用NEAR标号,无条件转移指令根据转移目标的FAR / NEAR 属性来决定汇编成段间还是段内转移。转移的距离有三种:FAR用4个字节表示目标地址NEAR用2个字节表示目标地址(的距离)SHORT用1个字节表示目标地址(的距离)3、指令助记符指令系统中的指令4、操作数1)立即操作数数值常数符号常数由EQU等伪指令定义其数值表达式符号常数和数值常
8、数的运算表达式 总之,汇编过程中就能够计算出具体数值。2)寄存器操作数3)储存器操作数地址表达式: 有效地址EA =BX/BP+SI/DI+disp(8/16位) 其中,disp可用常数、变量及其表达式段基:如有BP,则用SS 如有段超越符(如 ES:BX,用ES)则用指定的段寄存器, 其他,都用DS4-2-4 操作数表达式1、属性分析运算符:SEG,OFFSET,TYPE 2、合成运算符:PTR 还有很多其它运算符,以后碰到再介绍。注意:源程序中,名字、标号、变量名的取名规则:1) 不得与8086汇编语言的保留字相同。所谓保留字包括:指令助记符、伪指令、运算操作符等。2) 由英文字母和数字等
9、符号组成,不超过8个字符。第13次上课内容4-3 汇编语言程序设计一、程序结构1、顺序结构没有程序控制类指令,不改变程序运行顺序。最基本也最简单。2、分支结构根据某个条件是否满足(成立),决定程序的走向。由条件转移指令实现分支控制。是计算机软件具有分析判断能力的基础。3、循环结构程序中的某一段需要连续多次重复运行,可以采用循环结构。可以大大减少程序代码量,优化程序结构。计算机最擅长的就是简单重复处理,而人最烦的就是简单重复工作,因此,循环结构是最能够体现计算机优势的程序结构。4、子程序结构1)程序中需要多次运行的某一段相对独立的程序段可以用子程序的形式编写,主程序中多次调用,可以简化程序和开发
10、工作量。2)按照相对独立功能模块化程序设计:按照相对独立功能自成一个子程序模块,复杂的程序由若干个模块(子程序)组成。5、以上四种结构组成的复杂结构配图:4-3-1 顺序结构已知寄存器BL中有二位BCD数。编程送CRT 显示。(zlgc3.asm) ASSUME CS:COD MOV DL,BL MOV CL,4 SHR DL,CL OR DL,30H MOV AH,2 INT 21H AND DL,0FH ADD DL,30H MOV AH,4CH END STARTDOS功能调用;顺序程序例子。DOS功能调用实例例2:编程使电脑显示“WHAT IS YOUR NAME?”,然后,用户输入自
11、己的英文名字xxx(必须三个字符),电脑显示”WELCOME YOU ,Mr xxx”。(exmp0.asm)DAT SEGMENTMSG1 DB WHAT IS YOUR NAME?,0AH,0DH,24HMSG2 DB 0AH,0DH,WELCOME YOU ,Mr $BUF DB 4 DUP(24H)DAT ENDSCOD SEGMENT ASSUME CS:DATBEGIN: MOV AX,DAT MOV DS,AX MOV AH,9 MOV DX,OFFSET MSG1 MOV AH,1 MOV BUF,AL MOV BUF+1,AL MOV BUF+2,AL LEA DX, MSG2 MOV DL,BUF MOV DL,BUF+1 MOV DL,BUF+2COD ENDS END BEGIN4-4分支结构程序设计分支结构是计算机软件具有分析判断能力的基础。它根据某个条件是否满足(成立),决定程序的走向,选择不同的处理方法和过程。分支控制由条件转移指令实现,所以分支程序设计的关键是选择分支的判断依据和如何将此依据转化为状态标志的变化。分支机构举例:将内存中的二进制数据转换成二位十六进制数显示。(exmp2.asm)DAT SEGMENTSTRING DB 1AH,2BH,56H,78H,90H,0A2H,0B3HDAT ENDSCOD ,DS: MOV SI,NUM ;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1