收藏 分享(赏)

北邮信通院微机原理第四章.ppt

上传人:天天快乐 文档编号:772712 上传时间:2018-04-22 格式:PPT 页数:116 大小:1.10MB
下载 相关 举报
北邮信通院微机原理第四章.ppt_第1页
第1页 / 共116页
北邮信通院微机原理第四章.ppt_第2页
第2页 / 共116页
北邮信通院微机原理第四章.ppt_第3页
第3页 / 共116页
北邮信通院微机原理第四章.ppt_第4页
第4页 / 共116页
北邮信通院微机原理第四章.ppt_第5页
第5页 / 共116页
点击查看更多>>
资源描述

1、第四章 汇编语言程序设计,主要内容汇编语言程序的结构汇编语言语句类型和组成汇编语言程序设计,8学时,4.1机器指令/汇编语言/高级语言,1、机器指令:计算机能识别的代码,机器指令是由二进制数组成的。2、汇编语言:汇编语言是一种符号语言,用助记符表示操作码,用符号或符号地址表示操作数或操作数地址,它与机器指令是一一对应的。例如对8086/8088:汇编语言为:PUSH AX 机器指令为:010100003 、高级语言:面向过程(如C, FORTRAN)或对象(如C+, Java)的语言,不依赖于机器,因而有很好的通用性和可移植性,汇编语言与高级语言的比较,4.1 机器指令/汇编语言/高级语言,文

2、件名.ASM 文件名.OBJ 文件名.EXE,汇编语言源程序,汇编,目标程序,连接,执行/调试程序,编辑程序EDIT.EXE,汇编程序MASM.EXE,连接程序LINK.EXE,8086汇编语言程序的开发过程,4.1机器指令/汇编语言/高级语言,ML 文件名.ASM,8086汇编语言程序的开发过程,1. 源程序的编辑:源程序文件要以ASM为扩展名源程序文件的形成(编辑)可以通过任何一个文本编辑器实现: 如DOS中的全屏幕文本编辑器EDIT2. 源程序的汇编汇编是将源程序翻译成由机器代码组成的目标模块文件的过程. MASM 6.x提供的汇编程序是ML.EXE:ML /c hello.asm如果源

3、程序中没有语法错误,MASM将自动生成一个目标模块文件(hello.obj);否则MASM将给出相应的错误信息, 这时应根据错误信息,重新编辑修改源程序后,再进行汇编,8086汇编语言程序的开发过程,3.目标模块的连接连接程序能把一个或多个目标文件和库文件合成一个可执行程序(.EXE、.COM文件):LINK hello.obj如果没有严重错误,LINK将生成一个可执行文件(hello.exe).ML汇编程序可自动调用LINK连接程序,实现汇编和连接的依次进行ML hello.asm汇编程序ML.EXE可带其他参数,常用ML /Fl /Sa hello.asm该命令除产生模块文件hello.o

4、bj和可执行文件hello.exe外,还将生成列表文件hello.lst. 列表文件是一种文本文件,含有源程序和目标代码,对我们学习汇编语言程序设计和发现错误很有用。,8086汇编语言程序的开发过程,4.可执行程序的运行与调试经汇编、连接生成的可执行程序在操作系统(DOS)下只要输入文件名就可以运行:hello.exe操作系统装载该文件进入主存,并开始运行。在DOS下运行程序时,COMMAND.COM把.EXE文件装入内存。装入时在数据段内偏移地址0处构造一个100H字节的程序段前缀PSP,然后是代码段/数据段/堆栈段内容。装入后,自动设置DS和ES寄存器指向程序段前缀,CS、IP、SS、SP

5、寄存器设置为由连接程序传过来的值(所以必须在程序中给DS、ES赋值)。,PSP,DS,ES,用户程序区,8086汇编语言程序的开发过程,程序结束返回DOS的方法:程序一开始先把PSP的段地址(由DS指向)压栈,把偏移地址0压栈。程序结束时RET指令使得:栈顶0000H-IP,PSP的段地址-CS,将要执行的指令是PSP里的内容,PSP里的前两个字节是指令INT 20H,是DOS中断调用,实现的功能就是“返回DOS”。 START PROC FARPUSH DS MOV AX,0PUSH AX:RETSTART ENDP,如果出现运行错误,可以从源程序开始排错,也可以利用调试程序帮助发现错误.采

6、用DEBUG.EXE调试程序:DEBUG hello.exe,4.2 8086汇编语言源程序的结构,汇编语言的源程序是分段的,由几个段形成一个源程序,每一段有一个段名,以SEGMENT为段开始,以ENDS结束;源程序最后以END作结束;一般有DATA段,CODE段,STACK段;一个段由若干语句组成,MY_DATA SEGMENT ;定义数据段SUM DB ? ;为符号SUM保留一个字节MY_DATA ENDS ;数据段结束MY_CODE SEGMENT ;定义代码段ASSUME CS:MY_CODE,DS:MY_DATA;规定CS,DS的内容 PORT_VAL EQU 3 ;端口的符号名GO

7、: MOV AX,MY_DATA ;DS初始化为 MY_DATA MOV DS,AX MOV SUM,0 ;SUM单元为0CYCLE: CMP SUM,100 ;SUM与100比较 JNA NOT_DONE ;若未超过转至NOT_DONE MOV AL,SUM ;若超过把SUM的内容 OUT PORT_VAL,AL ;通过AL输出然后停机 HLTNOT_DONE: IN AL,PORT_VAL ;输入下一个字节 ADD SUM,AL ;与以前的结果累加 JMP CYCLE ;转至CYCLEMY_CODE ENDS ;码段结束END GO ;整个程序结束,4.2.1汇编语言的语句格式,一、 汇编

8、语言的语句格式由汇编语言编写的源程序是由许多语句(也可称为汇编指令)组成的。每个语句由14个部分组成,其格式是: 标号: 指令助记符 操作数;注解 名字 伪指令助记符 参数;注解其中用方括号括起来的部分,可以有也可以没有。每部分之间用空格(至少一个)分开,一行最多可有132个字符 . 例:,1标号(名字):是给指令或某一存储单元地址所起的名字。可由下列字符组成:字母:A z ; 数字:0 9 ; 特殊字符:?、 、一、$ 。数字不能作标识符的第一个字符,而圆点仅能用作第一个字符。标识符最长为31个字符。当标识符后跟冒号时,表示是标号。它代表该行指令的起始地址;当标识符后不带冒号时,表示变量;伪

9、指令前的标识符不加冒号。2(伪)指令助记符: 表示不同操作的指令,可为8088的指令助记符,或伪指令。3操作(参)数:是指令执行的对象。依指令的要求,可能有一个、两个或者没有. 4注解:该项可有可无,是为源程序所加的注解,用于提高程序的可读性。,RET ;无操作数COUNT: INC CX ;一个操作数COST DB 3,4,5,6,7 ;伪指令,5个操作数MOV AX,BP十4 ;二个操作数,4.2汇编语言的语句格式,语句的种类(1)指令语句:汇编时产生目标代码,对应及其操作的语句。MOV AX,CX ADC AX,data1(2)伪指令语句:方便程序编写和帮助汇编程序正确处理的辅助性指示,

10、汇编时不产生目标代码。 data1 DW 1234H (3)宏指令语句:为书写方便,用一条宏指令代替一个汇编语句序列。汇编时,宏指令都用相应的语句序列取代,并产生目标代码。,4.2.2 8086汇编语言源程序的结构,一、段定义语句 一个完整的汇编源程序由3个段组成,即堆栈段、数据段和代码段。段定义伪指令可将源程序划分成若干段,以便生成目的代码和连接时将各同名段进行组合。 段定义伪指令一般格式为 : 段名 SEGMENT 定位类型 组合类型 类别 段名 ENDS(1)定位类型:用来规定段起始边界的要求,可以为以下四种,缺省为 PARA)PAGE: 16位段地址的最低8位必须为0,即从一页的起点开

11、始。PARA: 16位段地址的最低4位必须为0,即从一段的起点开始。WORD: 16位段地址的最低1位必须为0,即从偶地址开始。BYTE: 16位段地址可以为任意值,即段可以从任何字节开始,4.2.2 8086汇编语言源程序的结构,(2)组合类型(表示本段与其他段的关系,为连接程序使用,缺省为NONE):NONE: 与其他段不发生关系,每段都有自己的基地址PUBLIC: 与其他同名同类别的段连接在一起,使用一个共同的基 地址STACK: 与PUBLIC同样处理,但作为堆栈段COMMON:与其他同名同类别的段相互重叠在一起,使用一个共 同的地址AT表达式: 把本段装在表达式值所指定的段地址上(值

12、为16位;不能指定代码段)MEMORY: 把本段定位在所有其他段之上,若有多个则只有连接时遇到的第一个有效, 其余按COMMON处理)(3)类别名:为连接程序使用,把类别名相同的段放在连续的存储区间(一般有STACK、CODE、DATA)。,4.2.2 8086汇编语言源程序的结构,二、段寻址汇编程序必须知道程序的段结构,并知道在指令执行时哪个段由哪个段寄存器指定,这个信息在代码段的开始由ASSEMU语句提供。格式: ASSUME 段寄存器:段名,段寄存器:段名,由于ASSUME伪指令只指明某一个段名对应于哪一个段寄存器,并没有包含将段地址送入该寄存器的操作, 因此要将真实段地址装入段寄存器还

13、需用汇编指令来实现。,4.2.2 8086汇编语言源程序的结构,例如:CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK MOV AX,DATA ;DATA段值送AX MOV DS,AX ;AX内容送DS,DS才有实际段值CODE ENDS 当程序运行时,由于DOS的装入程序负责把CS初始化成正确的代码段地址,SS初始化为正确的堆栈段地址,因此用户在程序中就不必设置。 但是,在装入程序中DS/ES寄存器由于被用作其它用途,因此,在用户程序中必须用两条指令对DS/ES进行初始化,以装入用户的数据段地址。,4.2.2 8086汇编语言源程序的结构,三、汇编程序

14、结束伪指令END 该伪指令表示源程序的结束令汇编程序停止汇编。因此,任何一个完整的源程序均应有END指令。 END 表达式 表达式表示该汇编程序的启动地址。例如: END START ;表明该程序的启动地址为START。,4.2.2 8086汇编语言源程序的结构,;title Hello World Program (hello.asm)stacks segment stack stackdw 100h dup(?)stacks endsdata segment ; Contains all variables for the programmsgdbHello World!,0Ah,0Dh,

15、$data ends,Hello.asm,code segment; Contains all codeassume cs:code, ds:data, ss:stacksorg 100hmain proc mov ax, data mov ds, axmov ax, 0900h ;print the sentencemov dx, offset msg int 21h mov ax, 4C00h ; terminate the program normallyint 21hmain endpcode endsend main,hello.LST列表文件,DEBUG hello.exe,4.3

16、.1符号定义语句1. 等值语句EQU给符号定义一个值或别的符号名,或一条可执行的指令。汇编时该符号出现的位置,均用所给值代替。例:NEW_PORT EQU 32 COUNT EQU CX CBD EQU AAD一个符号一经EQU赋值后,不能重新再定义。2. 等号(Equal Sign) 语句与EQU类似,使用它能对符号进行再定义。例:B1 = 6 ; B1定义为6 B1 = 10 ;B1重新定义为10,4.3 8086汇编语言常用伪指令,4.3.2 数据定义伪指令,用于分配存储空间、定义所存数据长度以及对空间赋初值。格式1: 变量名 伪指令名 表达式1,表达式2,1. 伪指令可为DB, DW,

17、 DD DB:定义字节 DW:定义字,低字节放在低地址DD:定义双字,低字放在低地址2. 表达式: 数值表达式 例: DA_BYTE DB 50H , 50 , 0caH DA_WORD DW 0a3f1H , 498dH A1 DD 12345H ; Memory: 45H,23H,01H,00H,4.3.2 数据定义伪指令, ? 表达式。只分配空间,但不赋初值,可预置任何内容 例: DA_B DB ? , ? ;要求分配两个字节单元 DA_W DW ? , ? ;要求分配两个字单元 字符串表达式 数据项可以写成字符串形式,但只能用DB、DW、DD定义,而且DW、DD语句定义的串只允许包含两

18、个字符。,例: S1 DB ABCDEF S2 DW AB, CD, EF S3 DD AB, CD 这几个变量在存储器中存放情况如下: S1 41H S2 42H S3 42H 42H 41H 41H 43H 44H 00H 44H 43H 00H 45H 46H 44H 46H 45H 43H 00H 00H,注意:定义多于两个以上字符的字符串时,只能使 用DB伪指令,不能使用DW和DD等伪指令。,4.3.2数据定义伪指令,格式2:变量名 伪指令名表达式DUP(表达式) 用于定义重复的数据或分配一数据块空间例:D_B1DB 20H DUP(?) ;保留20H个字节 D_B2 DB 10H

19、DUP(ABCD);字符串ABCD 重复10H次 D_W1 DW 10H DUP(4) ;字4重复10H次,4.3.3 过程定义伪指令,过程定义伪指令PROC和ENDP具有一定功能的程序段看成为一个过程,可以被别的程序调用。一个过程由伪指令PROC和ENDP来定义: 过程名 PROC 类型 过程体 RET 过程名 ENDP 过程名是为过程所起的名称,不能省略; 过程的类型由FAR(远过程,为段间调用)和NEAR(近过程,在本段内调用)来确定,缺省为近过程; ENDP表示过程结束; 过程体内至少应有一条RET指令,以便返回被调用处。 过程可以嵌套,也可以递归使用。,4.3.3 过程定义伪指令,例

20、如:用于延时的过程(子程序) DELAYPROC NEARPUSH CX;保持进入时的CX值MOV CX,28AH;改变CX值可改变延时长短WAIT:LOOP WAITPOP CX ;恢复原CXRETDELAYENDP调用该过程:CALL DELAY,4.3.4 定位伪指令ORG,ORG伪指令规定了在某一段内,程序或数据代码存放的起始偏移地址。 一般格式: ORG 例如:DATA SEGMENT ORG2000H BUFF DB STRING DATA ENDS上述变量定义中,BUFF从DATA段偏移为2000H的单元开始存放。,4.4 常数、变量和标号,(1) 常数 二进制: 1011100

21、1B 十进制: 1234D或1234 八进制: 255Q或255O 十六进制: 3A5DH, 第一位为字母时前面加数字0 字符串常数:用单引号括起来的一个或多个字符组成一个字符串常数。例如:The 在内存中以字符的ASCII码值 存放,注意一个空格也是一个字符,因此: The 在内存中是: 54H、68H、65H和20H。,4.4 常量、变量和标号,(2)变量:代表存放在某些存储单元的数据。这些数据在程序运行期间随时可以修改。变量有三个属性:段属性、偏移属性和类型属性(所具有的字节数)。例如:VAR_DATASEGMENTORG100HDATA1DB12HDATA2DW5678HDB20HVA

22、R_DATAENDS,4.4 常量、变量和标号,(3) 标号 标号是一条指令的目标代码的符号地址,它常用作转移指令(或子程序调用指令)的操作数。标号有三个属性:段属性、偏移属性和类型属性。段属性是该标号的段地址,偏移属性是该标号的偏移地址,类型属性是表示该标号的范围是本段(NEAR)或段间(FAR),或称为近或远属性。,4.5 8086汇编语言表达式和运算符,表达式: 由常数、操作数、操作符和运算符组成,在汇编时产生确定值。有五种运算符: 算术运算符、逻辑运算符和关系运算符、取值运算 符、属性运算符。 1、算术运算符 +、*、/、MOD(取余)、SHL(左移)、SHR(右移) 例: 32 MO

23、D 5 ;结果为2 21H SHL 2 ;结果为84H 2、逻辑运算符(按位操作) AND(与) 24H AND 0FH = 04H OR (或) 24H OR 0FH = 2FH XOR (异或) 24H XOR 0FH = 2BH NOT (非) NOT 24H = 0DBH,4.5 8086汇编语言表达式和运算符,3、关系运算符 关系运算是逻辑判定,当为真时结果为全1(0FFFFH),为假时结果为全0。 EQ (等于) ;若PP=25,则25 EQ PP = 0FFFFH NE (不等于) ;25 NE PP = 0 LT (小于) ;25 LT 26 = 0FFFFH LE (小于等于

24、) ;25 LE PP = 0FFFFH GT (大于) ;26 GT PP = 0FFFFH GE (大于等于) ;24 GE PP = 0关系运算符一般不单独使用,常与其它运算符结合使用。例如: ADD AX, (port GT 60) AND 50) OR (port LE 60) AND 70)当port 的值大于60时,上述指令汇编为 ADD AX, 50当port 的值小于或等于60时,上述指令汇编为 ADD AX, 70,4、取值运算符:当程序需要标号或变量的属性时,把存储器地址操作数分解成它的组成部分: SEG和OFFSEY SEG (求段地址), 格式: SEG 符号名 OF

25、FSET(求偏移地址), 格式 : OFFSET 符号名 例如:DATA SEGMENTORG 2000HBUFDW356AHDATA ENDS执行:MOV AX SEG BUF;将BUF段地址送入AXMOV AX OFFSET BUF;将BUF段内偏移送入AX,4.5 8086汇编语言表达式和运算符,TYPE (求符号名类型值),格式: TYPE 符号名 LENGTH和SIZE,求为符号名分配的项数。 格式: LENGTH 符号名,求为符号名分配的元素个数 这里为符号名定义的数据项必须是用 重复格式DUP( )定义的。而对于其他情况则回送1。格式: SIZE 符号名,求为符号名分配的字节数

26、回送分配给该符号名的字节数,是LENGTH的值和TYPE的值的乘积。,4.5 8086汇编语言表达式和运算符,例 :K2 DW 10 DUP (?) 则 LENGTH K2 = 10 TYPE K2 = 2 SIZE K2 = 20 例:AARR DW 2,4,6 则 LENGTH AARR = 1 TYPE AARR = 2 SIZE AARR = 2可以看出: SIZE = ( LENGTH ) * ( TYPE 符号名),4.5 8086汇编语言表达式和运算符,分离运算符HIGH和LOW:分别返回一个16位表达式的高位字节和地位字节例如:设SSS=2050HMOV AL LOW 3080

27、H;AL=80HMOV AH,HIGH SSS;AH=20H$运算符:用于伪指令参数时,返回汇编地址计数器的当前值;用于指令时,返回该指令的首地址。例如:ARRAY DW 1,2,$+4, 3,4, $+4如果在汇编时,ARRAY的偏移地址是0074H,则在ARRAY数组中,两个$+4得到的结果是不同的,这是由于$的值是在不断变化的,4.5 8086汇编语言表达式和运算符,4.5 8086汇编语言表达式和运算符,$运算符用在伪操作的参数字段时,和用在指令中的情况是不同的,用在伪操作中它表示的是地址计数器的当前值。用在指令中它只表示该指令的首地址,而与$本身所在的字节无关。例如指令 JNE $+

28、6, 表示满足条件时转移到该指令的首地址加6以后所在的单元。1000:2543 JNE $+6则转移地址是2549H例:下面的数据段定义,COUNT 表示什么? DATA SEGMENT BUFDB0123456789ABCD COUNTEQU$ - BUF DATAENDS 这里,COUNT的值就是数据区的长度,所以COUNT=14,4.5 8086汇编语言表达式和运算符,5、属性运算符(1) 定义符号名为新类型 格式: 类型 PTR 符号名 PTR的功能归纳如下: 保证运算时操作数类型的匹配 例: F1DB16H,38H F2DW1234H,26ABH MOV AX,WORD PTR F1

29、;AX=3816H MOV BL,BYTE PTR F2;BL=34H,4.5 8086汇编语言表达式和运算符, 通过PTR指明是字单元还是字节单元 例: MOVBYTE PTR BX,10H;BX为字节单元MOVWORD PTR SI,20H;SI为字单元 用PTR来改变距离属性 例:JMPFAR PTR LLOOP ;段间转移CALLDWORD PTR BX ;远程调用(2)指定新类型 格式: 符号名 EQU THIS 类型 例: LABC EQU THIS BYTE ;LABC是字节类型 LABD DW 4321H, 2255H;LABD是字类型 MOV AL , LABC ;AL =

30、21H MOV AX , LABD ;AX = 4321H,4.5 8086汇编语言表达式和运算符,(3)段超越运算符格式:段寄存器加冒号强迫当前指令的操作数的寻址不按约定的段进行,而由段超越运算符指定的段寻址例:MOV AX, ES:BX ;强迫操作数来自ES段(4) SHORT运算符通知汇编器,转移目标在+127 - -128之间例:JMP SHORT F1,问题:,例:FAR DB 23H, 45H AAA:MOV AX,FAR例: MOV BX,OFFSET VAR1MOV BX,7,常量和变量的名字及标号不能用宏汇编的保留字,此程序段汇编时会出现操作类型不明确错误需要修改为:MOV

31、BYTE PTR BX,7 ;字节操作或MOV WORD PTR BX,7 ;字操作,4.6 ARM处理器汇编语言简介,对ARM汇编,执行性语句与说明性语句均有如下格式:标号 ARM指令或伪指令 ;注释其中的标号从一行的行头开始,不能包含空格。每一条指令的助记符可以全部用大写、或全部用小写,但不允许在一条指令中大、小写混用。ARM汇编语言源程序由若干个段(Section)组成,存放执行代码的段称为代码段,而存放代码运行时需要用到的数据的段称为数据段。一个ARM汇编程序至少应该有一个代码段。,4.6 ARM处理器汇编语言简介,1. ARM汇编语言源程序的段定义伪指令 AREA , 其中secti

32、on_name为段名,attr为段属性,多个属性用逗号分隔.常用的段属性有:CODE:代码段,默认只读(READONLY)DATA:数据段,默认可读可写(READWRITE)READONLY:本段为只读READWRITE:本段可读可写COMMON:多源文件共享段,4.6 ARM处理器汇编语言简介,2.指定程序的入口点ENTRY语法格式:ENTRYENTRY伪操作用于指定汇编程序的入口点。在一个源文件里最多只能有一个ENTRY。在一个完整的汇编程序中至少要有一个ENTRY(当有多个ENTRY时,程序的真正入口点由链接器指定)。3. 指定汇编源程序的结束语法格式:ENDEND伪指令用于通知汇编器已

33、经到了源程序的结尾。,4.6 ARM处理器汇编语言简介,AREA Addp, CODE, READONLY; 定义一个代码段 ENTRY; 程序入口点START MOV R0, #10 MOV R1, #3 ADD R0, R0, R1STOP MOV R0, #0x18 LDR R1, =0x20026 SWI 0x123456 END; 源程序结束,4.6 ARM处理器汇编语言简介,4.定义变量伪指令定义全局变量:GBLA(GBLL或GBLS)GBLA定义一个全局数字变量(默认初值为0);GBLL定义一个全局逻辑变量(默认初值为假);GBLS定义一个全局字符串变量(默认初值为空)。定义局部

34、变量:LCLA(LCLL或LCLS)LCLA定义一个局部数字变量(默认初值为0);LCLL定义一个局部逻辑变量(默认初值为F);LCLS定义一个局部字符串变量(默认初值为空)。局部变量只在定义该变量的程序段内有效。,4.6 ARM处理器汇编语言简介,5.定义数据伪指令定义字数据: 标号 DCD 表达式定义半字数据: 标号 DCW 表达式定义字节数据: 标号 DCB 表达式例: DATA3 DCD 1, 2, 3分配连续三个字存储单元,并分别初始化为1、2及3,4.6 ARM处理器汇编语言简介,6.读取地址或32位立即数宏指令由于ARM指令对立即数长度的限制,使得某些数据的传送必须用多条指令来实

35、现,为方便使用,ARM汇编器专门设计了宏指令来避免这种限制。LDRcond register, exprL | label-exprregister为目标寄存器;label-expr 为基于标号的地址表达式;exprL为32位的立即数.通过该宏指令可直接加载一个任意32位立即数或地址. LDR宏指令将通过一组指令来实现该宏指令的功能.注意: 宏指令LDR与指令LDR所使用的助记符是一样的,但宏指令中会在一个”=“后给出参数. 指令LDR中不会出现”=“. 另外伪指令中的立即数不使用前缀”#”.例: LDR R3,=0xFF0 ; R30xFF0 LDR R1,=TABLE ; R1TABLE地

36、址,4.7基本结构程序设计,程序设计步骤 1、分析问题 2、确定算法 3、画流程图,简单程序也可以不画流程图,直接编程。 4、内存空间分配 5、编写程序 6、静态检查 7、上机调试好程序1、程序结构模块化,简明易读,易于调试和维护2、执行速度快3、占用内存少,4.7基本结构程序设计,1、顺序结构顺序结构程序设计是没有分支,没有循环的直线运行程序,程序执行按照IP(PC)内容自动增加的顺序进行。,例: 用查表法计算平方值。设0 9的平方值连续存放在以TABLE开始的存储区域中,求VARX单元内容(设为0 9中某个数)的平方值,要求结果放在RSLT单元中。要求分别编写出8086/8088及ARM汇

37、编程序。,分析:建立平方表,通过查表完成计算。,4.7基本结构程序设计,(1)8086/8088汇编程序如下:STACKSEGMENT;堆栈段DB 100 DUP (?)STACK ENDSDATASEGMENT;数据段VARXDB 5;程序将要求5的平方RSLTDB ?TABLE DB 0,1,4,9,16,25,36,49,64,81 ; 09的平方表DATAENDS,CODE SEGMENT;代码段ASSUME CS:CODE,DS:DATA,SS:STACKSTART PROC FAR PUSH DS MOV AX,0 PUSH AX ;保证返回DOS, MOV AX,DATA MOV

38、 DS,AX ;为DS送初值 LEA BX,TABLE ;BX为平方表的起始地址(偏移量) MOV AL,VARX ;AL为VARX单元内容5 MOV AH,0 ADD BX,AX ; BX将指向平方表中值为25的单元 MOV AL,BX ; AL为25 MOV RSLT,AL ; 存查表的结果 RET ;返回DOSSTART ENDPCODE ENDS END START ;程序从START处开始执行,PUSH DSMOV AX,0PUSHMOV AX,DATA,IP,CS,FLAG,堆栈栈顶,代码地址,机器码,DEBUG调试,DEBUG中的标志位的表示,DEBUG命令,MOV DS,AX

39、LEA BX,TABLEMOV AL,VARXMOV AH,0,VARX,RSLT,0,1,4,9,16,25,36,49,64,81,TABLE地址=DS:0002,数据段,执行效果,ADD BX,AXMOV AL,BXMOV RSLT,ALRET,RSLT,RETINT 20; 返回DOS,IP,CS,堆栈栈顶,执行RET前的CS:IP,执行RET后的CS:IP,执行RET前的SP,执行RET后的SP,执行RET后的代码地址和机器码,当程序运行时,由于DOS的装入程序负责把CS初始化成正确的代码段地址,SS初始化为正确的堆栈段地址,因此用户在程序中就不必设置。 但是,在装入程序中DS/ES寄存器由于被用作其它用途。程序执行前,DOS在内存建立一个程序段前缀(PSP),实际要执行的代码和数据放在PSP的后面。PSP头两个字节是返回DOS的指令INT 20。程序执行时,DS:0和ES:0被初始化为PSP的地址。因此,在用户程序中必须用两条指令对DS/ES进行初始化,以装入用户的数据段地址。,

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

当前位置:首页 > 企业管理 > 经营企划

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报