第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程.

Slides:



Advertisements
Similar presentations
第1章第1章 PC/AT 系統 1 Chapter 1 Chapter 1 PC/AT 系統 001.
Advertisements

输入输出程序设计 输入输出的基本概念 无条件方式输入输出 查询方式输入输出 中断方式输入输出.
汇编语言程序设计 吴 向 军 中山大学计算机科学系
微型计算机技术 教 学 指 导(七) 太原广播电视大学 郭建勇.
第10章 DOS功能调用与BIOS中断调用.
第7章 8086/8088汇编语言程序设计 7.1 引言 7.2 顺序程序设计 7.3 分支结构程序设计 7.4 循环结构程序设计
第四章 汇编语言 程序设计 任课教师:王晓甜
大连理工大学软件学院 软件工程系 赖晓晨 计算机组成与结构 大连理工大学软件学院 软件工程系 赖晓晨
第一章 计算机基础知识 第一节 计算机概述 一、计算机的基本组成和工作原理 二、有关术语 三、计算机发展简史 四、微型计算机概述
C# 程式設計 第一部分 第1-4章 C# 程式設計 - 南華大學資管系.
汇编语言与接口技术 教师:范新民.
本周实验安排 实验内容:(P231)人名排序的例子。
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年10月30日.
第2章 高级编程的硬件基础 主要内容 计算机硬件组成 80x86微机系统 Turbo C编译方式 BIOS和DOS调用.
第3章 80x86汇编语言程序设计(下).
4.1 汇编语言 4.2 顺序结构程序 4.3 分支程序设计 4.4 循环程序设计 4.5 子程序设计
9.1 可编程并行输入/输出接口芯片8255A 9.2 可编程计数器/定时器 可编程串行输入/输出接口芯片8251A
3.3.5 程序控制指令 控制转移指令分为: 转移指令 循环控制指令 调用和返回指令 中断指令.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月26日.
第7章 中断与异常.
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
汇编语言程序设计 Assembly Language Programming
第三章 寻址方式与指令系统 3.1 寻址方式 一条指令通常由两大部分构成: 操作码 操作数
微机原理与接口技术 第3章 8086指令系统 朱华贵 2015年09月25日.
第2章 MCS-51单片机指令系统与汇编语言程序设计
微机原理与接口技术 第2章 8086系统结构 朱华贵 2015年09月17日.
汇编语言程序设计 吴 向 军 中山大学计算机科学系
第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第九章 计数器和定时器电路 第一节 概述 第二节 Intel 8253的控制字 第三节 Intel 8253的工作方式 第四节 Intel 8253在IBM PC机上的应用.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月10日.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月05日.
单片机原理与应用 C/C++在现代数字计算机上的实现.
第八章 输入输出程序设计 总线 CPU MEM I/O接口 I/O设备.
C++ 程式設計— 語言簡介 台大資訊工程學系 資訊系統訓練班.
第4章 汇编语言程序设计 4.1 程序设计语言概述 4.2 汇编语言的程序结构与语句格式 4.3 汇编语言的伪指令
微机原理及应用 主讲:谢维成 西华大学 电气信息学院 1.
基本的”防”黑客技术 Basic” ” Hacker Technique
微机原理及应用 主讲:郑海春.
第一章 8086程序设计 第二章 MCS-51程序设计 第三章 微机基本系统的设计 第四章 存贮器与接口 第五章 并行接口
第8章 PCH中的常规接口.
汇编语言程序设计课程设计 第二次实验 DEBUG基本命令与算术运算指令
多媒體概論報告-BMP 組員名稱: 盧彥良-資料蒐集 周誠哲-資料蒐集
微型机系统与接口技术自学部分 只作扩展知识用 本电子课件包含2011版第3, 6, 7, 8章自学部分 东南大学计算机科学与工程学院.
微型计算机原理及应用.
第3章 微型计算机输入输出接口 3.1 输入/输出接口 3.2 输入输出数据传输的控制方式 3.3 开关量输入输出接口 欢迎辞.
第六章 子程序结构 §6.1 子程序的设计方法 §6.2 嵌套与递归子程序 §6.3 子程序举例 §6.4 DOS系统功能调用.
1.3 微型计算机的结构和工作原理.
第 13 章 中断系统.
第二章 模拟量输出通道 本章要点 1.模拟量输出通道的结构组成与模板通用性; 2.8位D/A转换器DAC0832的原理组成及其接口电路
第九章 高级宏汇编语言 9.1 结构 结构就是将逻辑上有一定关系的一组数据,以某种方式组合在一起所形成的数据形式。
第5章 循环与分支程序设计 学习目标: 了解并掌握循环程序的构造方法,尤其是对循环控制条件的设置以及可能出现的边界情况的考虑。掌握起泡排序算法这种多重循环程序设计中的常用方法。交换标志位的设置在此算法中更能提高效率。学会在数组排序算法中采用折半查找法来提高查找效率。学会使用跳跃表法实现CASE结构。
4.1 汇编语言程序格式 4.2 MASM中的表达式 4.3 伪指令语句 4.4 DOS系统功能调用和BIOS中断调用
3.4.5 控制转移指令(Control transfer instructions) (一)、控制转移指令概述
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月19日.
第二章 8086微处理器. 第二章 8086微处理器 微处理器的基本结构 8086微处理器的主要特性和内部结构 8086CPU的工作模式和引脚信号 8086的存储器管理 8086的总线操作和时序.
第10章 可编程外围接口芯片8255A及其应用 10.1 概述 A的工作原理 A的应用举例.
习题3 1、 分别说明下列指令的原操作数和目的操作数各采用什么寻址方式。 设定如下: ①立即寻址 ② ① ②寄存器寻址
第 3 章、組合語言 作者:陳鍾誠 旗標出版社.
第九章 BIOS和DOS中断 在存储器系统中,从地址0FE000H开始的8K ROM(只读存储器)中装有BIOS(Basic Iuput /output System)例行程序。驻留在ROM中的BIOS给PC系列的不同微处理器提供了兼容的系统加电自检,引导装入,主要I/O设备的处理程序以及接口控制等功能模块来处理所有的系统中断。使用BIOS功能调用,给程序员编程带来很大方便,程序员不必了解硬件操作的具体细节,直接用指令设置参数,然后中断调用BIOS中的子功能,所以利用BIOS功能编写的程序简洁,可读性好,
第2章 80x86计算机组织  计算机系统  存储器  中央处理机  外部设备.
第5章 循环与分支程序设计  循环程序设计  分支程序设计.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年12月17日.
第八章 中断系统.
微机原理与接口技术 微机原理与接口技术 朱华贵 2015年11月06日.
第12章 中断 罗文坚 中国科大 计算机学院
第6章 子程序结构 在程序设计中,我们会发现一些多次无规律重复的程序段或语句序列。解决此类问题一个行之有效的方法就是将它们设计成可供反复调用的独立的子程序结构,以便在需要时调用。在汇编语言中,子程序又称过程。 调用子程序的程序称为主调程序或主程序。 2019/7/20 ch6.
微机原理与接口技术 第5章 汇编语言程序设计 西安邮电大学计算机学院 王 钰.
大数据搜索挖掘实验室 第五章 子程序设计 张华平 副教授 博士 Website: 大数据搜索挖掘实验室
第4章 MCS-51汇编语言程序设计 教学基本要求: (1)、了解MCS-51汇编语言程序设计的特点;
第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程
第三章 8086的指令系统 8086指令特点 8086的寻址方式 8086的指令格式及数据类型 8086的指令集.
Presentation transcript:

第4章 汇编语言程序格式  汇编程序功能  伪操作  汇编语言程序格式  汇编语言程序的上机过程

1. 程序运行步骤及生成的文件 编辑程序 汇编程序 连接程序 myfile.asm myfile.lst myfile.crf 1. 程序运行步骤及生成的文件 编辑程序 myfile.asm 汇编程序 myfile.lst myfile.crf otherfiles.obj myfile.obj 连接程序 myfile.map myfile.exe

建立, 运行汇编语言程序 C>EDIT MYFILE . ASM C>MASM MYFILE . ASM Microsoft (R) Macro Assembler Version 5.10 Copyright (C) Microsoft Corp 1981,1988.All rights reserved. Object filename [MYFILE.OBJ]: Source listing [NUL.LST]: MYFILE.LST Cross-reference [NUL.CRF]: 47962 + 413345Bytes symbol space free 0 Warning Errors 0 Severe Errors C>LINK MYFILE . OBJ Microsoft (R) Overlay Linker Version 3.64 Copyright (C) Microsoft Corp 1983-1988. All rights reserved. Run File [MYFILE.EXE]: List File [NUL.MAP]: Libraries [.LIB]: LINK : warning L4021: no stack segment C>MYFILE

产生目标文件(.obj)和列表文件(.lst)。 展开宏指令。 2. 汇编程序功能 汇编程序的主要功能: 检查源程序,给出出错信息。 产生目标文件(.obj)和列表文件(.lst)。 展开宏指令。

3. 伪操作(伪指令) Directives 伪操作是汇编程序对源程序进行汇编时处理的 处理器选择伪操作 段定义伪操作 程序开始和结束伪操作 3. 伪操作(伪指令) 伪操作是汇编程序对源程序进行汇编时处理的 操作,完成处理器选择、存储模式定义、数据定义、 存储器分配、指示程序开始结束等功能。 处理器选择伪操作 段定义伪操作 程序开始和结束伪操作 数据定义及存储器分配伪操作 表达式赋值伪操作 地址计数器与对准伪操作 基数控制伪操作 Directives

◆ 处理器选择伪操作: .8086 选择 8086 指令系统 .286 选择 80286 指令系统 .8086 选择 8086 指令系统 .286 选择 80286 指令系统 .286P 选择保护模式下的 80286 指令系统 .386 选择 80386 指令系统 .386P 选择保护模式下的 80386 指令系统 .486 选择 80486 指令系统 .486P 选择保护模式下的 80486 指令系统 .586 选择 Pentium 指令系统 .586P 选择保护模式下的 Pentium 指令系统

◆ 段定义伪操作: 完整的段定义格式 PSP data segment ; 定义数据段 … data ends ;---------------------------------------- extra segment ; 定义附加段 extra ends code segment ; 定义代码段 assume cs:code, ds:data, es:extra start: mov ax, data mov ds, ax ; 段地址  段寄存器 code ends end start DS ES  文件头 PSP SS CS 装入模块 EXE程序的内存映象图

…… code segment main proc far assume …… start: push ds mov ax, 0 push ax ret main endp code ends end start …… code segment main proc far assume …… start: mov ax,4c00h int 21h main endp code ends end start

PARA BYTE WORD DWORD PAGE 组合类型 combine_type 段名 SEGMENT [定位类型] [组合类型] [使用类型] [‘类别’] …… …… ; 语句序列 段名 ENDS 定位类型 align_type PARA BYTE WORD DWORD PAGE 组合类型 combine_type PRIVATE PUBLIC COMMON STACK AT exp 使用类型 use_type USE16 USE32 (4) 类别 ‘class’

存储模式与简化段定义伪操作 (1) MODEL 伪操作 .MODEL 存储模式 [,语言类型] [,操作系统类型] [,堆栈选项] 存储模式:tiny small medium compact large huge flat (2) 简化的段定义伪操作 .code [name] .data .data? .fardata [name] .fardata? [name] .const .stack [size] .model small .stack 100H .data …… .code .startup .exit 0 end

.model small .data …… .code start: mov ax, @data mov ds, ax mov ax, 4c00h int 21h end start .model small .data …… .code .startup .exit 0 end .model small .const …… .data .code start: mov ax, DGROUP mov ds, ax mov ax, 4c00h int 21h end start

段组定义伪操作 datagroup group dseg1, dseg2 dseg1 segment word public ‘data’ …… dseg1 ends dseg2 segment word public ‘data’ dseg2 ends datagroup group dseg1, dseg2 cseg segment para public ‘code’ assume cs:cseg, ds:datagroup start: mov ax, datagroup mov ds, ax mov ax, 4c00h int 21h cseg ends end start

datagroup group data1,data2 data1 segment word const1 dw 100 data1 ends   data2 segment word var1 dw ? data2 ends datagroup group data1,data2 code segment assume cs:code, ds:datagroup mov ax, datagroup mov ds, ax   mov ax, const1 mov var1, ax … mov ax, 4c00h int 21h code ends end start

◆ 程序开始和结束伪操作: TITLE text NAME module_name END [ label ] . STARTUP . EXIT [ return_value ]

◆ 数据定义及存储器分配伪操作: [变量] 助记符 操作数 [ , 操作数 , … ] [ ; 注释] [变量] 助记符 操作数 [ , 操作数 , … ] [ ; 注释] 助记符:DB DW DD DF DQ DT - 0AH 04H 10H 64H 00H 01H FBH FFH DATA_BYTE  DATA_WORD  例: DATA_BYTE DB 10,4,10H,? DATA_WORD DW 100,100H,-5,?

ARRAY DB ‘HELLO’ DB ‘AB’ DW ‘AB’ PAR1 DW 100,200 PAR2 DW 300,400 4CH 4FH 41H 42H PAR1 DW 100,200 PAR2 DW 300,400 ADDR_TABLE DW PAR1,PAR2 VAR DB 100 DUP (?) DB 2 DUP (0,2 DUP(1,2),3)

OPER1 DB ?, ? OPER2 DW ?, ? …… MOV OPER1, 0 ;字节指令 MOV OPER2, 0 ;字指令 OPER1 DB 1, 2 OPER2 DW 1234H, 5678H MOV AX, OPER1+1 × MOV AL, OPER2 × 类型不匹配 MOV AX, WORD PTR OPER1+1 MOV AL, BYTE PTR OPER2 (AX)=3402H (AL)=34H

LABEL 伪操作: name LABEL type BYTE_ARRAY  WORD_ARRAY  BYTE_ARRAY LABEL BYTE WORD_ARRAY DW 50 DUP (?) tos LABEL WORD 50字 tos  0064H

◆ 表达式赋值伪操作: 表达式名 EQU 表达式 “ = ” 伪操作 (允许重复定义) ALPHA EQU 9 BETA EQU ALPHA+18 BB EQU [BP+8] “ = ” 伪操作 (允许重复定义) …… EMP = 7 EMP = EMP+1

◆ 地址计数器与对准伪操作: 地址计数器 $ :保存当前正在汇编的指令的地址 $ 用在伪操作的参数字段: ORG $+8 ; 跳过8个字节的存储区 JNE $+6 ; 转向地址是 JNE 的首址 +6 JMP $+2 ;转向下一条指令 $ 用在伪操作的参数字段: 表示地址计数器的当前值 ARRAY  0074 01H 00H 02H 00H 7CH 0078 00H ARRAY DW 1, 2 , $+4 , 3 , 4 , $+4 03H 00H 04H 00H 82H 007E 00H

ORG 伪操作: SEG1 SEGMENT ORG 10 VAR1 DW 1234H ORG 20 VAR2 DW 5678H SEG1 ENDS BUFFER LABEL BYTE ORG $+8 BUFFER DB 8 DUP (?) ORG 100H START: ……

EVEN ;使下一地址从偶地址开始 ALIGN boundary ALIGN 4 ALIGN 2 ; EVEN A DB ‘morning’ B DW 2 DUP (?) ALIGN boundary ALIGN 4 ALIGN 2 ; EVEN

◆ 基数控制伪操作: . RADIX 表达式 ; 规定无标记数的基数 MOV BX, 0FFH MOV BX, 178 .RADIX 16 MOV BX, 178D

3. 汇编语言程序格式 源程序的每条语句可表示为: [名字] 操作 操作数 [; 注释] 标号 指令 寄存器 说明程序或语句 3. 汇编语言程序格式 源程序的每条语句可表示为: [名字] 操作 操作数 [; 注释] 标号 指令 寄存器 说明程序或语句 变量 伪指令 标号 的功能 宏指令 变量 常数 表达式 标号/变量:段值、偏移量、类型三种属性 表达式:数字表达式 地址表达式

表达式操作符: (1) 算术操作符:  、 、、 、Mod VIDEO_BUF DB 25*80*2 DUP(?) ARRAY DW 1,2,3,4,5,6,7 ARYEND DW ? MOV CX, (ARYEND-ARRAY)/2 ADD AX, BLOCK+2 ; 符号地址常数 有意义 ;   时意义不明确 MOV AX, BX+1 ;  MOV AX, [BX+1] ; 寄存器间接寻址

(2) 逻辑和移位操作符: AND、OR、XOR、NOT、SHL、SHR OPR1 EQU 25 ;00011001B OPR2 EQU 7 ;00000111B AND AX, OPR1 AND OPR2 (2) 逻辑和移位操作符: AND、OR、XOR、NOT、SHL、SHR ; AND AX,1 MOV AX, 0FFFFH SHL 2 ; MOV AX,0FFFCH IN AL, PORT_VAL ;61H OUT PORT_VAL AND 0FEH, AL ;60H

(3) 关系操作符: EQ、NE、LT、LE、GT、GE 计算结果为逻辑值:真 0FFFFH 假 0000H MOV FID, (OFFSET Y - OFFSET X) LE 128 X: …… …… Y: …… 若 128 (真) 汇编结果: MOV FID, -1 若 128 (假) 汇编结果: MOV FID, 0

(4) 数值回送操作符: OFFSET、SEG、TYPE、 LENGTH、SIZE 功能:回送变量或标号的偏址 / 段址 TYPE 变量 / 标号 / 常数 DB DW DD DF DQ DT NEAR FAR 常数 1 2 4 6 8 10 -1 -2 0 LENGTH 变量 功能:回送由DUP定义的变量的单元数,其它情况回送1 SIZE 变量 功能:LENGTH * TYPE

ARRAY DW 100 DUP (?) TABLE DB ‘ABCD’ ADD 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

(5) 属性操作符: PTR、段操作符、SHORT、 THIS、HIGH、LOW、HIGHWORD、LOWWORD 类型 PTR 表达式 MOV WORD PTR [BX], 5 段操作符 MOV ES: [BX], AL SHORT 标号 JMP SHORT NEXT THIS 类型 TA EQU THIS BYTE TD DW 1234H NEXT EQU THIS FAR MOV AX,2 HIGH和LOW CONS EQU 1234H MOV AH, HIGH CONS MOV AL, LOW CONS

4. 汇编语言程序的上机过程 .model tiny .code org 100h begin: jmp main 4. 汇编语言程序的上机过程 .model tiny .code org 100h begin: jmp main ;************************ num1 dw 1199H num2 dw 1166H sum dw ? main proc near mov ax, num1 add ax, num2 mov sum, ax mov ax, 4c00h int 21h main endp end begin

code segment 'code' assume cs:code,ds:code,ss:code,es:code org 100H begin: jmp main num1 dw 1199H num2 dw 1166H sum dw ? main proc near mov ax, num1 add ax, num2 mov sum, ax mov ax, 4c00h int 21h main endp code ends end begin

第4章作业 Page 155 4.15 4.16 4.5 4.8 4.12 4.14 4.17