收藏 分享(赏)

第三章_汇编语言程序设计.ppt

上传人:dreamzhangning 文档编号:5753278 上传时间:2019-03-15 格式:PPT 页数:75 大小:866KB
下载 相关 举报
第三章_汇编语言程序设计.ppt_第1页
第1页 / 共75页
第三章_汇编语言程序设计.ppt_第2页
第2页 / 共75页
第三章_汇编语言程序设计.ppt_第3页
第3页 / 共75页
第三章_汇编语言程序设计.ppt_第4页
第4页 / 共75页
第三章_汇编语言程序设计.ppt_第5页
第5页 / 共75页
点击查看更多>>
资源描述

1、微机原理与接口技术,1,汇编语言程序设计,微机原理与接口技术,2,3.1.1 汇编语言的语句格式,一、汇编语言的语句格式,汇编语言包含两类语句,硬指令语句:指示CPU执行某种操作,汇编后对应一条指令代码 伪指令语句:指示汇编程序如何汇编、定义变量、设置过程等,一般不产生机器码,微机原理与接口技术,3,3.1.1 汇编语言的语句格式,1、硬指令语句格式(可执行语句),例 even: shr ax, 1 ; ax2ax,2、伪指令语句的格式(不可执行语句),例 maxint equ 0ah ; 常量maxint=0ah,标号: 硬指令助记符 操作数,操作数 ;注释,名字 伪指令助记符 参数,参数,

2、 ;注释,微机原理与接口技术,4,二、汇编语言源程序格式,简化段定义格式,完整段定义格式,3.1.2 汇编语言源程序格式,微机原理与接口技术,5,.model small .stack.data.code start: mov ax, datamov ds, axmov ax, 4c00hint 21hend start,程序开始,程序终止,汇编结束,3.1.2 汇编语言源程序格式简化段格式,定义存储模式 tiny small medium compact large huge flat,简化定义逻辑段 .code name; .data; .stack size,微机原理与接口技术,6,完整

3、定义逻辑段,程序开始,程序终止,汇编结束,建立逻辑段与段寄存器的对应关系,3.1.2 汇编语言源程序格式完整段格式,微机原理与接口技术,7,段名字 SEGMENT 定位组合类别(段模块) 段名字 ENDS,成对出现,逻辑段的完整定义,3.1.2 汇编语言源程序格式完整段格式,微机原理与接口技术,8,堆栈段定义为:STACK代码段定义为:CODE数据段定义为:DATA,类别class属性:指定逻辑段的类型名,stack segment stack ;定义段名为stack的堆栈段db 1024 dup(0) ; 分配堆栈段大小为1024字节stack ends ; 堆栈段结束,例:,3.1.2 汇

4、编语言源程序格式完整段格式,微机原理与接口技术,9,SEGMENT虽然定义了不同的段,但仅仅便于程序的阅读。汇编程序并不知道所定义的段与内存中的数据段、代码段是如何对应的。因此需要用ASSUME 伪指令说明段寄存器与逻辑段之间的关系:,格式: ASSUME 寄存器名:段名,,例:ASSUME SS:STACK,CS:CODE,DS:DATA,3.1.2 汇编语言源程序格式完整段格式,微机原理与接口技术,10,ASSUME指令不为段寄存器赋值,要在代码段中明确对ES和DS赋值。CS/IP/SS/SP的值由连接程序设置,不需在代码段中赋值。,ASSUME语句必须放在代码段中,一般放在代码段定义语句

5、之后,3.1.2 汇编语言源程序格式完整段格式,微机原理与接口技术,11,stack segment stackdb 1024 dup(0)stack endsdata segmentdata endscode segment codeassume cs:code, ds:data, ss:stackstart: mov ax, datamov ds, axmov ax, 4c00hint 21hcode ends end start,3.1.2 汇编语言源程序格式完整段格式,微机原理与接口技术,12,汇编语言源程序开发过程,源程序.asm,目标程序.obj,可执行程序.exe,应用程序,MA

6、SM汇编,LINK连接,DEBUG调试,EDIT编辑,三、汇编语言源程序开发过程,3.1.3 汇编语言源程序开发过程,微机原理与接口技术,13,2. 汇编程序功能,汇编程序的主要功能:检查源程序,给出出错信息。产生目标文件(.obj)和列表文件(.lst)。展开宏指令。,微机原理与接口技术,14,第一步 编辑:,微机原理与接口技术,15,第二步 汇编:,可以不输入,用回车回应,汇编,微机原理与接口技术,16,修改好后再汇编:,微机原理与接口技术,17,第三步 连接并执行:,微机原理与接口技术,18,用DEBUG调试程序:,1)用U命令查看程序和目标码及指令地址,段值 偏移 指令码 反汇编的源码

7、,微机原理与接口技术,19,2)用T命令单步跟踪,逐条执行看中间结果,DEBUG将显示每个寄存器以及各标志位的当前值。,这是还未执行的下一条指令,这是MOV BX,SI的执行结果,标志位,微机原理与接口技术,20,3)对于系统功能调用,可以用G命令设置断点执行,也可以用P命令跳过过程与系统功能服务程序。,设断点执行,断点设在INT 21H的后一句,INT 21H输出的一个字符,微机原理与接口技术,21,注意:DEBUG只支持16位汇编调试,如果要编写32位汇编程序,需要用MASM 6.11汇编和连接,用CodeView软件查看执行代码。但MASM 6.11中带的CodeView 4.01可以查

8、看32位程序的执行代码,不能进行单步调试。要调试可以考虑使用SoftICE软件。另外,VC嵌入汇编可以支持80486的所有指令,也支持32位汇编。,微机原理与接口技术,22,例1:在屏幕上显示“hello, assembly!”,3.1.3 汇编语言源程序开发过程,微机原理与接口技术,23,完整段格式程序,3.1.3 汇编语言源程序开发过程,微机原理与接口技术,24,EXE程序由独立的堆栈段,数据段和代码段组成, 可以包含多个数据段和代码段,数据长度可以超过64KBEXE程序结构:文件头(PSP)+装入模块,四、可执行程序的结构,3.1.4 可执行程序的结构,微机原理与接口技术,25,装入EX

9、E文件后内存的状况:,中断向量表,ROMBIOS 数据区,DOS常驻部分,PSP,DOS暂驻部分,视频RAM,ROMBIOS,DS、ES,RAM高端,RAM低端,CS,用户程序区,3.1.4 可执行程序的结构,微机原理与接口技术,26,3.2.1 常量,一、 常 量,常数,: 二进制/八进制/十进制/十六进制常数,: 单引号或双引号括起来的字符串,字符串,符号常量,数值表达式,: 用伪指令EQU和=为其赋值,: 四类运算符计算表达式的值,微机原理与接口技术,27,伪指令EQU和为符号常量赋值格式:符号名 EQU 表达式符号名 表达式 (允许重复定义) 例: COUNT EQU 20CALLDO

10、S EQU CARRIAGERETURN = 13 BETA EQU ALPHA+18 BB EQU BP+8 EMP = 7 EMP = EMP+1 ,3.2.1 常量伪指令EQU,微机原理与接口技术,28,汇编语言有4类运算符:,算术运算符: +, -, *, /, MOD,逻辑运算符: AND, OR, XOR, NOT,移位运算符: SHL, SHR,关系运算符: EQ, NE, GT,LT,GE,LE,3.2.1 常量运算符,条件为真时运算结 果为-1(FFFFH),为假时运算结果为0,微机原理与接口技术,29,例1:PI_INT EQU 31416/10000MOV AX, 314

11、16 MOD 10000MASKB EQU 00110010B MASKB1=MASKB SHR (2*2) MOV AL, 15 GE 1111B,; PI_INT=3,; AX =1416,; MASKB1=03H,3.2.1 常量运算符,; AL =FFH,微机原理与接口技术,30,MOV AX, (CHOICE LT 20) AND 5) OR (CHOICE GE 20) AND 6),3.2.1 常量运算符,例2:MASKB EQU 00101011BMOV AL, 5EHAND AL, MASKB AND 0FH,0BH,; AL=0AH,微机原理与接口技术,31,3.2.1 常

12、量运算符,微机原理与接口技术,32,3.2.1 常量运算符,当一个表达式中同时有几个运算符时,规则为: 1、先执行优先级高的运算; 2、优先级相同的操作,从左至右顺序进行; 3、有圆括号的,先括号内后括号外。 例: K1=10 OR 5 AND 1 ;K1=11 (0BH)K2= (10 OR 5) AND 1 ;K2=1,微机原理与接口技术,33,代表存储单元,需要事先定义才能使用 采用变量定义伪指令为变量申请存储空间并初始化存储单元,二、 变 量,变量的定义,3.2.2 变量,微机原理与接口技术,34,变量定义格式:,DB -定义字节 DW-定义字 DD -定义双字 DF-定义3字 DQ-

13、定义4字 DT- 定义5字,变量名 伪指令 初值表,初值表首元素的逻辑地址,初始化参数 常量、表达式 “?”表示分配了存储空间但未赋初值,3.2.2 变量定义格式,微机原理与接口技术,35,例: RUF1 DB 12, 12, 12H, 26, -1 RUF2 DW 12, 12H, 1234H BUFFER DD 12347856H, ?,31,32,0C,12,0C,FF,32,31,12,00,34,12,56,78,34,12,-,-,-,-,3.2.2 变量定义格式,微机原理与接口技术,36,例: DATA_BYTE DB 10,4,10H,? DATA_WORD DW 100,10

14、0H,-5,?,0A,04,10,-,3.2.2 变量定义格式,微机原理与接口技术,37,例:ARRAY DB HELLODB ABDW AB,例: OPER1 DB 1, 2OPER2 DW 1234H, 5678HMOV AX, OPER1+1 MOV AL, OPER2 类型不匹配MOV AX, WORD PTR OPER1+1MOV AL, BYTE PTR OPER2(AX)=3402H (AL)=34H,ARRAY ,微机原理与接口技术,38,例: DATA1 DW 10 DUP (?) ;分配10个字的空间DATA2 DB 20 DUP (5)DATA2 DB 5 DUP (s)

15、,定义重复的数据时可以采用复制操作符DUP进行定义,格式为:,重复次数 DUP(重复参数),3.2.2 变量定义格式,微机原理与接口技术,39,5,4,8,8,8,5,4,8,8,8,3.2.2 变量定义格式,例:RUF1 DB 2 DUP (5, 4, 3 DUP(8),微机原理与接口技术,40,变量的定位,汇编程序按照硬指令和伪指令的书写顺序依次分配存储空间 利用ORG定位伪指令指定数据或代码存放的位置 采用操作符“$”表示当前偏移地址值,3.2.2 变量定位,微机原理与接口技术,41,例:ORG 100HOGR $+10BLOCK DB Read after meNUM EQU $-BL

16、OCKLEN EQU NUM/2,;得到BLOCK所占存储空间的字节数,;从100H处安排数据或程序,;当前偏移地址加10,3.2.2 变量定位,;得到BLOCK的数据个数,微机原理与接口技术,42,例:ORG $+8 ; 跳过8个字节的存储区JNE $+6 ; 转向地址是 JNE 的首址 +6JMP $+2 ;转向下一条指令 例:ARRAY DW 1, 2 , $+4 , 3 , 4 , $+4例:SEG1 SEGMENTORG 10VAR1 DW 1234HORG 20VAR2 DW 5678HORG $+8VAR3 DW 1357HSEG1 ENDS,3.2.2 变量定位,微机原理与接口

17、技术,43,练 习,DATA SEGMENT ORG 0100H BUF1 DB 10H,20H,30H,40H,50H BUF2 DW BUF1 BUF3 DD BUF1 COUNT EQU BUF2-BUF1 BUF4 DW BUF2-BUF1 DATA ENDS,DATA值为1200H,请图示数据在内存中的存放形式:,3.2.2 变量定位,微机原理与接口技术,44,答 案,1200:0100 (buf1),0101,0102,0103,0104,0105 (buf2),0106,0107 (buf3),0108,0109,010A,010B (buf4),010C,5个数据,buf1的逻

18、辑地址 (DD),buf1的有效地址 (DW),Buf1占用字节数,3.2.2 变量定位,微机原理与接口技术,45,名字指向一条伪指令,标号指向一条硬指令,二者具有两个属性:逻辑地址:段地址偏移地址类型:,三、名字和标号的属性,3.2.3 名字和标号的属性,微机原理与接口技术,46,地址操作符,取得名字或标号的段地址和偏移地址,3.2.3 名字和标号的属性地址操作符,微机原理与接口技术,47,例: first dd 12345678h,0core dw ?,12hdata db 10 dup(10) ;数据段定义mov ax, seg coremov bx,seg data ; ax=bxmo

19、v ax, offset core ; lea ax,core; ax=8mov bx,offset data ; lea bx,data; bx=12,3.2.3 名字和标号的属性地址操作符,微机原理与接口技术,48,类型操作符,设置名字或标号的类型属性,3.2.3 名字和标号的属性类型操作符,微机原理与接口技术,49,3.2.3 名字和标号的属性类型操作符,例1:F1 DW 1234HMOV AL,BYTE PTR F1F2 DB 23H,56H,18HMOV BX,WORD PTR F2,; AL=34H,; BX=5623H,例2: FIRST EQU THIS BYTE SECOND

20、 DW 5678HMOV AX,TYPE FIRSTMOV BL,FIRST,; FIRST变量的类型为字节,地址与SECOND相同,; BL=78H,; AX=0001H,微机原理与接口技术,50,(续上表),3.2.3 名字和标号的属性类型操作符,微机原理与接口技术,51,3.2.3 名字和标号的属性类型操作符,例:TABLE DW 100 DUP(?)MOV CX,LENGTHOF TABLE MOV CX,SIZEOF TABLENUM EQU 0CDEFHMOV AH,HIGH NUMMOV AL,LOW NUM,; CX=100,; CX=100*2=200,; AH=0CDH,;

21、 AL=0EFH,微机原理与接口技术,52,3.2.3 名字和标号的属性类型操作符,例:ARRAY DW 100 DUP (?)TABLE DB ABCDADD SI, TYPE ARRAY ; ADD SI, 2 ADD SI, TYPE TABLE ; ADD SI, 1 MOV CX, LENGTH ARRAY ; MOV CX, 100 MOV CX, LENGTH TABLE ; MOV CX, 1 MOV CX, SIZE ARRAY ; MOV CX, 200 MOV CX, SIZE TABLE ; MOV CX, 1,微机原理与接口技术,53,操作系统DOS和微机中的ROM-

22、BIOS系统为程序员提供了丰富的中断服务程序:操作系统功能调用: INT 21HROM-BIOS功能调用:INT 16H / INT 10H,系统功能调用,微机原理与接口技术,54,BIOS和DOS基本调用 调用方法: 1、将调用参数装入指定的寄存器中; 2、BIOS或DOS功能号装入AH; 3、如需子功能号,把它装入AL; 4、按中断号调用DOS或BIOS中断(INT); 5、检查或取得返回参数。,微机原理与接口技术,55,INT 21H的输入输出功能调用,1号功能,MOV AH, 01H INT 21H,2号功能,MOV DL, 字符 MOV AH, 02H INT 21H,功能:输入一个

23、字符 入口:无 出口:AL=输入字符的ASCII码,功能:显示一个字符 入口:欲显示字符的ASCII码 出口:无,微机原理与接口技术,56,9号功能:显示字符串,MOV DX, OFFSET STRINGMOV AH, 09HINT 21H,功能:显示内存中以“$”符结束的字符串 入口:DS:DX指向字符串首地址 出口:无,微机原理与接口技术,57,10号功能:输入字符串,MOV DX, OFFSET BUFFERMOV AH, 0AHINT 21H,功能: 从键盘输入字符到内存缓冲区,以回车键结束 入口:DS:DX=输入字符串在内存缓冲区中的首地址。缓冲区第一个字节由用户设置最大输入字符数(

24、1-255),后跟回车码 出口:从第三个字符到回车符止是输入缓冲区的字符,微机原理与接口技术,58,BIOS键盘中断 (INT 16H),AH 功能 返回参数 0 从键盘读一字符 AL=字符码,AH=扫描码 1 读键盘缓冲区的字符 如ZF=0,AL=字符码,AH=扫描码如ZF=1,缓冲区空 2 取键盘状态字节 AL=键盘状态字节,字符数字键 字符码为ASCII码功能键、控制键 字符码为0,对应一个扫描码,微机原理与接口技术,59,功能号 AH=0,1, 2, 3, 5, 6, 7, 8, 9, 0AH, 0EH 13H 例:清除屏幕mov ah, 6 ; 屏幕初始化mov al, 0 ; 全屏

25、空白mov bh, 7 ; 卷入行属性mov ch, 0 ; 左上角行号mov cl, 0 ; 左上角列号mov dh, 24 ; 右下角行号mov dl, 79 ; 右下角列号int 10h ; BIOS调用,定义窗口,BIOS显示中断 INT 10H,微机原理与接口技术,60,主要内容,3.1 汇编语言的源程序格式 3.2 常量、变量和属性 3.3 汇编程序设计,微机原理与接口技术,61,汇编语言源程序的设计方法,3.3 汇编程序设计设计方法,微机原理与接口技术,62,汇编语言源程序的基本结构,顺序结构,分支结构,子程序结构,循环结构,3.3 汇编程序设计程序结构,微机原理与接口技术,63

26、,(四) 子程序,3.3.4 子程序,把功能相对独立的程序段单独编写和调试,作为一个相对独立的模块供程序使用,就形成子程序,微机原理与接口技术,64,子程序的定义和编写,subname proc ; 过程伪指令push ax push bx push cx ; 过程体pop cx pop bxpop axret ;过程返回 subname endp ;过程结束,; 保护寄存器,; 恢复寄存器,子程序名,3.3.4 子程序定义,微机原理与接口技术,65,子程序的调用和返回,主程序:call subname 子程序: ret ;过程返回,3.3.4 子程序定义,微机原理与接口技术,66,例13:用

27、显示器功能调用输出一个字符的子程序,; 代码段 start: mov dl, ?call dpcharmov ax, 4c00hint 21h dpchar procpush axpush bx,mov bx, 0mov ah, 0ehint 10hpob bxpob axret dpchar endpend start,3.3.4 子程序定义,微机原理与接口技术,67,子程序可以嵌套和递归,3.3.4 子程序嵌套和递归,子程序内调用子程序即为嵌套。设计嵌套子程序要注意正确的调用和返回, 寄存器的保护与恢复等子程序直接或间接嵌套调用自身时成为递归调用,微机原理与接口技术,68,例14:显示以“

28、0”结尾字符串的嵌套子程序,;数据段 msg db well, I made it!,0 ; 代码段 mov si, offset msgcall dpstrmov ax, 4c00hint 21hdpstr procpush ax,dsp1: lodsbcmp al,0jz dps2call dpcharjmp dps1 dps2: pop axret dpstr endp dpchar proc ,3.3.4 子程序嵌套和递归,微机原理与接口技术,69,子程序可与主程序共用一个数据段, 也可以使用不同的数据段 若子程序使用的数据或变量不需要与 其它程序共享,可以在子程序最后设置数据区、定义

29、局部变量。此时子程序需要采用CS寻址数据,3.3.4 子程序数据段,微机原理与接口技术,70,例:将例1改写为通用子程序,htoasc propush bxmov bx, offset asciiand al, 0fhxlat cs:asciipop bxretascii db 0h,31h,32h,33h,34h,35h,36h,37hdb 38h,39h, 41h,42h,43h,44h,45h,46hhtoasc endp,注意! 数据在代码段中!,3.3.4 子程序数据段,微机原理与接口技术,71,子程序可以具有多个出口和入口,但一定要保证堆栈操作的正确性,3.3.4 子程序入口和出口

30、,微机原理与接口技术,72,小 结,小 结,汇编语言语句类型,程序开发步骤:编辑汇编链接调试运行,硬指令语句,伪指令语句,微机原理与接口技术,73,段定义伪指令: SEGMENTENDS,伪指令语句,过程定义伪指令:PROCENDP,段寻址伪指令: ASSUME,程序定位伪指令:ORG,汇编结束伪指令:END,符号定义伪指令:EQU, =,数据定义伪指令:DB,DW,DD,小 结,微机原理与接口技术,74,算术运算符: /MOD,运算符,逻辑运算符: NOT/AND/OR/XOR,关系运算符: EQ/NE/LT/GT/LE/GE,值返回运算符:$/SEG/OFFSET/TYPE /HIGH/LOW/SIZEOF/LENGTHOF,属性运算符: PTR/THIS ,小 结,移位运算符: SHL/SHR,微机原理与接口技术,75,小 结,程序结构,顺序结构,分支结构,循环结构,子程序,参数 传递,寄存器,共享变量,堆栈,

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

当前位置:首页 > 高等教育 > 大学课件

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


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

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

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