微机原理第四章1
微机原理作业与答案第四章1
第四章汇编语言程序设计4-2下列程序执行后,寄存器AX BX CX的内容分别是多少?D SEGMENAT 0202H;定位数据段地址ORG 0202H ;定位偏移地址DA_WORD DW 20HMOV AX,DA_WORD ;(AX)=0020HMOV BX,OFFSET DA_WORD ;(BX)=0202HMOV CL,BYTE PTR DA_WORD ;(CL)=20H将变量DA_WOR的属性改变为字节型) MOVCH,TYPE DA_WORD ;(CH)=2( 变量类型数值);( CX)=0220H4-4试编制一程序,把CHAR中各小写字母分别转换为对应的大写字母,并存放在CHAR 开始的单元中(题目要求:不改变CHAR的内容)方法1,小写字母转换一个输出显示一个,前3种方法均使用了AL寄存器D SEGMENTCHAR1 DB "abcdefghijklmnopqrstuvwxyz"N EQU $-CHAR1 ; 变量必须先定义后使用,而不能相反CHAR2 DB N DUP(0);; 不能把此句与上一句对调,CHAR2 DB $-CHAR t ; 的同学这样写,错在哪?CHAR2DB$-CHAR1DUP(0) 是可以的D ENDSS SEGMENT STACKDB 200 DUP(0)S ENDSC SEGMENTASSUME CS:C,DS:D,SS:S ;ASSUM是伪指令,后面不能写冒号START: MOV AX,DMOV DS,AX;MOV ES,AX ; 只要用到串操作指令且DILEA SI,CHAR1 ;MOV SI,OFFSET CHAR1LEA DI,CHAR2 ; MOV DI,OFFSET CHAR2 MOV CXN, ;$-CHAR1, 不可以AGAIN:MOV AL,[SI]SUB AL,20H ; AND AL,5FH 有的同学是这样实现的MOV [DI],ALMOV DL,ALMOV AH,2INT 21H ; 从屏幕显示INC SIINC DILOOP AGAINMOV AH,4CHINT 21H ; ; 不是必须的C ENDSEND START方法2:使用通用数据传送指令MOVD SEGMENTCHAR1 DB ‘abcdefghijklmnopqrstuvwxyz 'N EQU $-CHAR1 ; 变量必须先定义后使用, 而不能相反CHAR2 DB N DUP(0); 不能把此句与上一句对调D ENDSSTACK SEGMENT STACKDB 200 DUP(0)STACK ENDS ;P126( 代码段和堆栈段是不可少的) C SEGMENTASSUME CS:C ,DS:D ,SS:SSTART: MOV AX,DMOV DS,AXMOV ES,AX ; 只要用到串操作指令且DIMOV SI,0 ;LEA SI,CHAR1MOV DI,0 ;LEA DI,CHAR2MOV CX,NAGAIN: MOV AL,CHAR1[SI] ; MOV AL,[SI] SUB AL,20HMOV CHAR2[DI],AL ; MOV [DI],ALINC SIINC DILOOP AGAINMOV AH,4CHINT 21H ; 不是必须的C ENDSEND START第3 种方法: 使用串的读写指令LODSB STOSB D SEGMENTCHAR1 DB ‘abcdef 'N EQU $-CHAR1CHAR2 DB $-CHAR1 DUP(0)D ENDSSTACK SEGMENT STACKDB 200 DUP(0)STACK ENDS ;P126( 代码段和堆栈段是不可少的) C SEGMENTASSUME CS:C,DS:D,SS:SSTART: MOV AX,DMOV DS,AXMOV ES,AXMOV SI,0 ;LEA SI,CHAR1MOV DI,0 ;LEA DI,CHAR2MOV CX,NCLD ; 不写( 隐含)也是0(递增)但不能STD AGAIN: LODSB ;执行一次, 隐含修改SISUB AL,32STOSB ;MOV [DI],AL ; 执行一次, 隐含修改DI INC DILOOP AGAIN ;LOOP指令只修改ex,不管SI,DIMOV AH,4CH iNT 21H ; 不是必须的e ENDsEND sTART 第四种方法2006级,没有显示使用MOVS指令D sEGMENTeHAR1 DB "abcdefghijklmnopqrstuvwxyz"N EQU $-eHAR1 eHAR2 DB N DUP(0) D ENDSS SEGMENT STAeK DB 200 DUP(0)S ENDS e SEGMENTASSUME eS:e,DS:D,SS:SSTART:MOV Ax,DMOV DS,AxMOV ES,AxLEA Si,eHAR1LEA Di,eHAR2MOV ex,NAGAiN:MOVSB ; SUB [Si],20HDEe Di ; MOVSBSUB BYTEPTR[Di],20H ;LOOP AGAiN 错在哪里?结果如何?iNeDiLOOP AGAiNMOV AH,4eH iNT 21H e ENDSEND START 方法5: 只用一个地址指针SiD SEGMENTeHAR1 DB "abcdefghijklmnopqrstuvwxyz"N EQU $-eHAR1 eHAR2 DB N DUP(0) D ENDSS SEGMENT STAeKDB 200 DUP(0)S ENDS e SEGMENTASSUME CS:C,DS:D,SS:SSTART:MOV AX,DMOV DS,AXMOV ES,AXMOV SI,0MOV CX,NAGAINMOV AL,CHAR1[SI];只用一个地址指针,SI[CHAR1]是错误的SUB AL,20HMOV CHAR2[SI],ALINC SILOOP AGAINint 3MOV AH,4CHINT 21HC ENDSEND START有的同学按数据是由键盘录入的来考虑的,也可行,程序中还有不少问题方法6:由键盘输入小写字母再转换输出, 回车符也占一个字节,输入需要小写转换成大写字母的内容从输入串的第3 个元素开始D SEGMENTA DB"CHAR1",0DH,0AH,"$"B DB"CHAR2",0DH,0AH,"$"CHAR1 DB 11,?,11 DUP(0); 准备输入1 0个小写字母CHAR2 DB 10 DUP(0)D ENDSS SEGMENT STACKDB 200 DUP(0)S ENDSC SEGMENTASSUME CS:C,DS:D,SS:SSTART:MOV AX,DMOV DS,AXMOV ES,AXMOV DX,OFFSET AMOV AH,9INT 21HLEA DX,CHAR1MOV AH,0AHINT 21H ; 由键盘输入字符串,1 0个字母(显示) , 1 个回车,共11 个字节LEA SI,CHAR1[2]LEA DI,CHAR2MOV CX,10 ; 需要转换的字符长度为10 个字节AGAIN:MOV AL,[SI]SUB AL,20HMOV [DI],ALINC SIINC DILOOP AGAIN ; 将小写字母字符串转换成大写字母字符串MOV BYTE PTR[DI],0DHINC DIMOV BYTE PTR[DI],0AHINC DIMOV BYTE PTR[DI],'$' ; 必须指明数据类型MOV DX,OFFSET CHAR2MOV AH,9INT 21H ; 输出'$' 结尾的大写字母字符串int 3MOV AH,4CHINT 21HC ENDS END START4-6在BUF地址处起,存放有100个字节的字符串,设其中有一个以上的“ A字符,编程查找出第一个“ A”字符相对起始地址的距离,并将其存入LEN单元。
微机原理与接口技术-第4-1章
例4-3 用键盘最多输入10个字符,并存 入内存变量Buff中,若按“Enter”键,则 表示输入结束。
用BIOS层功能调用实现 层功能调用实现 的源程序: 的源程序: .MODEL SMALL CR EQU 0DH .STACK 200H .DATA Buff DB 10 DUP(?) .CODE .STARTUP MOV CX, 0AH LEA BX, Buff
Windows层功能模块的调用
Win32 API使用堆栈来传递参数 API函数调用 C语言的消息框函数的声明: int MessageBox( HWND hWnd, // handle to owner window LPCTSTR lpText, // text in message box LPCTSTR lpCaption, // message box title UINT uType // message box style );//参数 最后还有一句说明: Library: Use User32.lib.//说明这个函数的位置
API 函数的返回值
有的API 函数有返回值,如MessageBox 定义 函数有返回值, 有的 的返回值是int类型的数,返回值的类型对汇编 的返回值是 类型的数, 类型的数 程序来说也只有dword 一种类型,它永远放在 一种类型, 程序来说也只有 eax 中。如果要返回的内容不是一个 如果要返回的内容不是一个eax所能 所能 容纳的, 容纳的,Win32 API 采用的方法一般是返回一 个指针, 个指针,或者在调用参数中提供一个缓冲区地 干脆把数据直接返回到缓冲区中去。 址,干脆把数据直接返回到缓冲区中去。
.REPEAT MOV AH, 0H INT 16H .BREAK .IF AL==CR MOV [BX],AL INC BX .UNTILCXZ .EXIT 0 END
微机原理ch4-1
外围设备
最基本的RAM芯片2114
2114为1K×4容量的RAM
A6 A5 A4 A3 A0 A1 A2 CS GND Vcc A7 A8 A9 I/O1 I/O2 I/O3 I/O4 WE
CS D7 D6 D5 D4 D3
2764的引线 2764是8K×8bit的EPROM芯 片。 • A0~A12为13条地址信号线, 芯片的容量为8K个单元。 • D0~D7为8条数据,每个存 贮单元存放一个字节。 • CS 为输入信号。 • OE 输出允许信号。 • PGM 为编程脉冲输入端。 • Vpp 编程电源(+25V)
2)只读存储器ROM (1) 掩膜ROM 利用掩膜工艺制造的存储器,程序和数据在制造
器件过程中已经写入,一旦做好,不能更改。大量生
产时,成本很低。例如,键盘的控制芯片。 (2) 可编程ROM 可编程ROM简称PROM(Programable ROM)。PROM由 厂家生产出的“空白”存储器,根据用户需要,利用
特殊方法写入程序和数据,即对存储器进行编程。但
只能写入一次,写入后信息是固定的,不能更改。它
类似于掩膜ROM,适合于批量使用。
3) 可擦除PROM
EPROM(Erasable Programable ROM)
可由用户按规定的方法多次编程,如编程之后想修 改,可用紫外线灯制作的擦除器照射7~30分钟左右, 使存储器复原,用户可再编程。这对于专门用途的研制 和开发特别有利,因此应用十分广泛。 4) 电可擦PROM EEPROM (Electrically Erasable PROM) 这种存储器能以字节为单位擦除和改写,而且不需 把芯片拔下插入编程器编程,在用户系统即可进行。随 着技术的进步,EEPROM的擦写速度将不断加快,将可作 为不易失的RAM使用。
微机原理第4章
第 4 章 存储器
4.1 存储器的分类 4.2 随机存取存储器RAM 4.3 只读存储器ROM 4.4 Cache 和SB SRAM 4.5 内存条和EDO DRAM、SDRAM、RDRAM 4.6 存储器与8086/8088 CPU之间的连接 4.7 存储器与80386/80486和Pentium CPU之间的连接 4.8 存储器容量与地址编号之间的关系
h
6
第 4 章内 部存储器
4.1.2 RAM的操作特点 随机存取存储器RAM又叫读写存储器,其操作特点为: (1) CPU对RAM中的每一单元能读出又能写入。 (2) 读/写过程先寻找存储单元的地址再读/写内容。 (3) 读/写时间与存储单元的物理地址无关。 (4) 失电后信息丢失。现已开发出带电池芯片的RAM,称
擦除的方法是用紫外线光照5~15分钟。由于擦除需一定条件,
因此写好后作ROM使用。
h
10
第 4 章内 部存储器
E2PROM使用电擦除,只要在不同的引脚加不同的电压就 可以实现全片或字节的擦除与重写,且能在线进行,因此它 可以作非易失性RAM使用,比EPROM方便得多,但其价高、 集成度不如EPROM。Flash Memory是一种可取代E2PROM的 快速电擦除非易失性ROM,且可作非易失性RAM使用。它的 结构和E2PROM相同,但擦除和写入速度极快,整体擦除约需 1 s,而E2PROM需15~20 min。编程写入时,以Flash Memory 28F256(32 KB×8)为例,整个芯片编程只需0.5 s,且擦除次数 可达10万次。
h
9
第 4 章内 部存储器
ROM通常使用MOS工艺集成。按操作功能不同又可分为
掩膜ROM(Mask Program ROM)、可编程只读存储器
微机原理和接口技术_第4章1
例
M1 DW 100 DUP(?)
M2 DW 1, 2, 3
M3 DB ‘ A, B, C, D ‘
MOV CX,LENGTH M1
MOV BL,LENGTH M2
MOV AL,LENGTH M3
4
§4-1 汇编语言程序格式——伪指令语句
二、伪指令语句/指示性语句
伪指令语句:无对应的机器指令,汇编时对伪指令进行处理,可完成数据定义、
存储区分配、段定义、段分配、指示程序结束等功能。
语句的格式:
名字 伪指令指示符 操作数,操作数
;注释
▲名字:名字后不允许带冒号“:”,但可以省略。 •通常是变量名、段名、过程名、符号名等。
M2 DW 1, 2, 3
M3 DB ‘ A, B, C, D ‘
MOV CX,SIZE M1
ADD BL, SIZE M2
MOV AL, SIZE M3
汇编时,计算表达式形成指令为:
MOV CX,200
;返回变量所包含的200个字单元
MOV BL,2
MOV AL,1
24
§4-2 MASM中的表达式 ——修改属性运算符
五、修改属性运算符
修改属性运算符也称作综合运算符(Synthetic operators)。 包括6种: 段操作符、PTR、THIS、HIGH、LOW、SHORT 功能: 在程序运行过程中,修改变量或标号的属性,包括段属性、偏移地址属 性、类型属性等。
汇编时,计算表达式形成指令为:
MOV CX,100
;返回变量所包含的100个字单元
MOV BL,1
MOV AL,1
23
微机原理与应用第四章PPT课件
0000H
START
0040H
C DPTR,#100H A, @DPTR R7, A DPTR A, @DPTR A, R7 BIG1 A, @DPTR BIG2 A, R7 DPTR @DPTR,A $
2、多分支程序
(1)嵌套分支结构
例4-3 设变量X存放于30H单元,函数值Y存放31H单元。试按照 式:
循环程序包括以下四个部分: 置循环初值 循环体 循环控制变量修改 循环终止控制
常用于循环控制的指令有: DJNZ、CJNE、JC、JNC 等控制类指令。
言的过程。分为计算机汇编和人工汇编两种。 汇编程序:具有完成汇编功能的程序。 目标程序:汇编语言源程序经过汇编得到的机器语言程序。 伪指令:提供汇编用控制信息的指令,只能被汇编程序所识别,
不是单片机的CPU可执行的指令。
1、定位伪指令ORG(Origin) 格式: [标号:] ORG m
m:16位二进制数,代表地址。 功能:得到机器语言程序的起始地址。
例4-2 假定在外部RAM中有100H、101H和102H共3个 连续单元,其中100H、101H单元中分别存放着两个8 位无符号数,要求找出其中的大数并存入102H单元。
分析:两个无符号数的大小比较可利用两数相减 是否有借位来判断,流程图和程序如下所示:
ORG LJMP ORG START:CLR MOV MOVX MOV INC MOVX SUBB JC MOVX SJMP BIG1:XCH BIG2:INC MOVX SJMP
SJMP OVER LAB1: MOV A, #1 OVER: MOV 31H, A
SJMP $
(2)多重分支结构
利用MCS-51单片机的散转指令JMP @A+DPTR, 可方便地实现多重分支控制,因此,又称为散转程序。 假定多路分支的最大序号为n,则分支的结构如图所示。
微机原理第四章
微机原理第四章在微机原理的学习中,第四章是一个非常重要的环节,本章主要介绍微机的输入输出系统。
输入输出系统是微机系统中的一个重要组成部分,其功能是将外部设备与微机系统相连,并进行数据的输入和输出。
本章将从输入输出系统的基本原理、输入输出接口、输入输出设备等方面进行介绍,帮助读者全面了解微机的输入输出系统。
首先,我们来介绍一下输入输出系统的基本原理。
输入输出系统是微机系统与外部设备进行数据交换的桥梁,它的主要功能是实现数据的输入和输出。
在微机系统中,CPU通过输入输出系统与外部设备进行通信,实现数据的交换和传输。
输入输出系统一般由输入输出接口和输入输出设备两部分组成,输入输出接口是连接CPU 和输入输出设备的桥梁,输入输出设备是实现数据输入输出功能的设备。
其次,我们将介绍输入输出接口的相关知识。
输入输出接口是连接CPU和输入输出设备的关键部件,它起着数据传输和转换的作用。
输入输出接口一般由接口芯片和接口电路组成,接口芯片是实现数据传输和控制的核心部件,接口电路是实现数据转换和信号调节的重要部分。
在微机系统中,输入输出接口起着非常重要的作用,它直接影响着输入输出系统的性能和稳定性。
接着,我们将介绍一些常见的输入输出设备。
输入输出设备是实现数据输入输出功能的设备,常见的输入设备有键盘、鼠标、扫描仪等,常见的输出设备有显示器、打印机、音响等。
输入输出设备在微机系统中起着非常重要的作用,它们直接影响着用户与微机系统的交互体验。
在选择输入输出设备时,需要根据实际需求和使用环境进行合理选择,以确保输入输出系统的正常运行和高效工作。
最后,我们将介绍一些输入输出系统的优化方法。
在实际应用中,为了提高输入输出系统的性能和稳定性,可以采取一些优化措施,例如优化接口设计、优化设备选择、优化数据传输方式等。
通过合理的优化措施,可以有效提高输入输出系统的工作效率和响应速度,提升用户体验和系统稳定性。
综上所述,微机原理第四章主要介绍了微机的输入输出系统,包括输入输出系统的基本原理、输入输出接口、输入输出设备和优化方法等内容。
微机原理第4章PPT课件
当一个定义的存储区内的每个单元要放置同样的数据或在存 储器中预留多个存储单元时,可用DUP 定义重复变量操作符。 格式: n DUP(?) 其中:n 为重复的次数,“( )”中为要重复的数据。
2、变量
指存放在存储单元中的值,在程序运行中是可以修改的。 变量都有三个属性:
(1) 段值:所在段的段地址; (2) 偏移地址:变量地址与所在段首地址间的偏移字节数; (3) 类型:变量中每个元素所包含的字节数。
类型有字节(BYTE)、字(WORD)、双字(DWORD); 3、标号
标号是可执行指令语句的地址的符号表示,通常作为转移 指令或调用指令的目的操作数,在程序运行过程中不能改变。
(1) 段地址:所在段的段地址; (2) 偏移地址:所在段内的偏移地址; (3) 类型:标号的类型反映了相应存储单元地址在作为 转移或调用指令的目标操作数时的寻址方式,可有两种情况, 即NEAR和FAR。
四、MASM中的表达式 表达式由运算对象(常数、变量、标号和地址)和运算符组成。
1.算术运算符、逻辑运算符和关系运算符 算术运算:+、-、×、÷、MOD(模除)、SHL、SHR 逻辑运算:AND、OR、 NOT 、 XOR 关系运算:EQ/NE/LT/GT/LE/GE(相等/不等/小于/大于/小于 等于/大于等于),结果为真,则返回0FFFFH,假则为0。
个字节内容,则可用PTR对其作用,使它暂时改变为字节 单元,即
MOV AL,BYTE PTR BUF 例如2:
JMP DWORD PTR [1000H] ;转移地址放在1000H开始的4个单元中, 低2个 字节为偏移量,高2个字节为段地址。
4.3 伪指令语句
一、数据定义及定义存储单元伪指令 功能:该类伪指令用来定义存储空间及其所存数据的长度。 格式:[变量] 助记符 操作数[,操作数][;注释] 变量字段是可选项,它用符号表示,其作用与指令语句前的 标号相同,但它的后面不跟冒号。汇编程序汇编时使其记以 第一个字节的偏移地址。
微机原理第四章
基本概念
汇编语言简介
助记符
-采用字符串代替二进制码表示指令,这些字符串被称为 采用字符串代替二进制码表示指令, 助记符
源程序
-采用助记符指令编写的程序
汇编
-将源程序翻译成目标程序的过程
基本概念
汇编语言简介
指令与机器语言指令基本上一一对应 伪指令
-不形成机器语言指令,仅仅在汇编过程中告诉汇编程序 不形成机器语言指令, 应如何汇编
0100:0000H … 000EH 000FH 0010H 0011H 0012H 0013H 0014H
… 33H 42H 41H 43H 00H 44H 00H
DATA1 … DATA6
例1:变量的定义 :
DATA1 DB 20H DATA2 DW 0204H, 1000H (DATA3 DB (-1*3), (15/3) DATA4 DD 12345H 0123’ DATA5 DB ‘0123 0123 AB’, DATA6 DW ‘AB , ‘C’, ‘D’ AB C , D DATA7 DB ? DATA8 DD ? DATA9 DB 5 DUP(00) DATA10 DW 3 DUP(?)
0100:0000H
20H
DATA1
例1:变量的定义 :
DATA1 DB 20H DATA2 DW 0204H, 1000H (DATA3 DB (-1*3), (15/3) DATA4 DD 12345H 0123’ DATA5 DB ‘0123 0123 AB’, DATA6 DW ‘AB , ‘C’, ‘D’ AB C , D DATA7 DB ? DATA8 DD ? DATA9 DB 5 DUP(00) DATA10 DW 3 DUP(?)
微机原理第四章
机 了磁芯存储器的地位。目前,绝大多数计算机都使用的是
原 半导体存储器。
理
2.按存储器的存取方式分类
按存取方式可分为随机存取存储器、只读存储器等
(1) 随机存储器 RAM (Random Access Memory)
随机存储器(又称读写存储器)是指通过指令可以随机
地对各个存储单元进行读和写,在一切计算机系统中,主
1intel2164a的内部结构8位8位a0a1aa2a3a4a5a6a7vddvss128128存储矩阵1128行译码器128128存储矩阵128读出放大器读出放大器128读出放大器读出放大器微机原理地址锁存器14io门输出缓冲器dout行时钟缓冲器列时钟缓冲器写允许时钟缓冲器数据输入缓冲器rascaswedin121128列译码器128读出放大器128读出放大器121128列译码器128128存储矩阵128128存储矩阵1128行译码器?存储体
动态RAM的基本存储单元,由一个MOS管T1和位于其 栅极上的分布电容C构成。当栅极电容C上充有电荷时,
表示该存储单元保存信息“1”。反之,当栅极电容上没
有电荷时,表示该单元保存信息“0”。
动态RAM存储单元实质上是
字选线
微
依靠T1管栅极电容的充放电原理 来保存信息的 ,电容上所保存的
机 原
电荷就会泄漏。在动态RAM的使
(2) Intel 2164A的外部结构:
Intel 2164A是具有16个引脚的双列直插式芯片。
• A0~A7:地址信号的输入引脚; • R A S :行地址选通信号输入引脚;
• C A S :列地址选通信号输入引脚;
• W E :写允许控制信号输入引脚;
微 机
• DIN :数据输入引脚; • DOUT:数据输出引脚; • VDD:+5V电源引脚;
微机原理第四章
堆栈主要用于暂存数据和在过程调用或处理中断时暂 存断点信息。 (1)堆栈的概念
堆栈是在存储器中开辟的一片数据存储区,这片存储 区的一端固定,另一端活动,且只允许数据从活动端 进出。采用“先进后出”的规则 。 (2)堆栈的组织
堆栈指示器SP,它总是指向堆栈的栈顶堆栈的伸展 方向既可以从大地址向小地址,也可以从小地址向大 地址。8086/8088的堆栈的伸展方向是从大地址向小 地址。
RD=0,表示当前CPU正在对存储器或I/O端口进行读操作。 (3)、WR:写信号,三态输出,低电平有效。 WR=0,表示当前CPU正在对存储器或I/O端口进行写操作。 (4)、M/IO:存储器或IO端口访问信号,三态输出。
M/IO=1,表示CPU正在访问存储器;
M/IO=0,表示CPU正在访问IO端口。
(2)8086存储器的逻辑地址和物理地址
① 存储器中的每个存储单元都可以用两个形式的地 址来表示: 实际地址:也称物理地址,是用唯一的20位二进制数 所表示的地址,规定了1M字节存储体中 某个具体单元的地址 。 逻辑地址:在程序中使用,由段地址和段内偏移地址 组成。
② 物理地址的形成
物理地址=段基址 * 16 +偏移地址。
1-有进、借位 0-无进、借位
1-低4位向高4位有进、借位 0-低4位向高4位无进、借位
3. 8086/8088存储器结构
(1)8086存储器的分段结构
段基址:段首地址的高16位。 段寄存器:存放段基址的寄存器,分为:数据段 DS、代码段CS、堆栈段SS和附加段ES。
例如:若已知代码段、数据段、附加段、堆栈段的段基址分别为 1055H、250AH、8FFBH、EFF0H 那么它们在存储器中的分布情况:
控制总线:传送各种控制信号
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
例:
N1 DB 15H, 36H N2 DW 1122H, 3344H LO: MOV AX, WORD PTR N1 ;使N1类型转换成字与AX类型匹配 MOV BL, BYTE PTR N2 ;使N2类型转换成字节与BL类型匹配
5)其它运算符
• 方括号[ ]。 指令中用方括号表示存储器操作数, 方括号里的内容表示操作数的偏移地址。 • 段重设运算符“:”。 运算符“:”跟在某个段寄存器名 (DS、ES、SS)之后表示段重设。 MOV AX, ES:[DI]
– – – – MOV AH, NOT 0FFH MOV BH, 8CH AND 77H MOV AL, 8CH OR 73H MOV BL, 0FFH XOR 44H
• 汇编时,计算表达式形成指令为:
MOV AH, 00H MOV BH, 04H MOV AL, 0FFH MOV BL, 0BBH
data string cr data stack
stack code start begin:
start code
name length_of_string segment db ‘abcduvwxyz’,0dh ;0DH为回车(CR) equ 0dh ends segment para stack’stack’ db 100 dup(?) ends segment assume cs:code,ds:data, ss:stack,es:data proc far push ds ;DS中包含程序段前缀起始地址 mov ax, 0 push ax …… endp ends end begin
• 字符串常量
• 例:‘A’
– MOV AL,’A’
• 例:’ABCD’
汇编时被译成对应的ASCII 码41H,42H,43H,44H
2. 标号
• 标号后有冒号,在指令性语句前 • 英文字母、数字及专用字符组成,最大长度不 能超过31个,且不能由数字打头,不能用保留字
(如寄存器名,指令助记符,伪指令)。
41H 42H 43H 44H 66H ‘A’ ‘B’ ‘C’ ‘D’
35
• 数据定义伪指令例:
– 数据段起始 – M1 DW 10H,20H – M2 DB 11H,’Hello!’ – 数据段结束
M1
M2
10 00 20 00 11 48 65 6C 6C 6F 21
0000H
0004H ‘H’ ‘e’ ‘l’ ‘l’ ‘o’ ‘!’
【例】 ARRAY DW 12H,13H,14H XT DW ? MOV CX, (XT-ARRAY)/2 因XT与ARRAY是顺序存放, (XT-ARRAY)/2 即为数组字长度数
4
表达式
• 汇编语言中使用了运算符有以下几种,即: • 算术运算符 • 逻辑运算符 • 关系运算符 • 取值和属性运算符 • 其它运算符
[例 ]
• • • • IN AL, PORT ;PORT为输入端口号 AND DX, PORT AND 0FEH OUT DX, AX ;DX为输出端口号 第2条指令说明:
后一个AND(运算符),汇编时计算表达式, 得到一个端口号,如原输入端口号PORT为80H, 则表达式PORT AND 0FEH的值为80H,若原输 入端口号PORT为81H,则计算表达式值也得到 80H。前一个AND(指令助记符),在运行程序时 将DX内容与计算出的表达式值相'与',结果送 到DX中,DX为输出端口号。
3)关系运算符
关系运算符包括EQ(相等)、NE(不等)、 LT(小于)、GT(大于)、LE(小于或等 于)、GE(大于或等于)6种。 关系运算符的两个操作数必须是数据,或是同 一段内的两个存储单元的地址。进行关系运算 的比较操作后,结果是一个数值。若结果为真, 输出全是1,即0FFH或0FFFFH。若结果为假, 输出全是0。关系运算符一般与逻辑运算符组 合起来使用。 例:MOV AX, 5 EQ 0101B MOV AX,0FFFFH MOV BX, 10H GT 16 MOV BX, 0000H
微型计算机系统原理及应用
Institute of Electrical Engineering
第四章 汇编语言程序设计
主讲人: 沈 虹
燕山大学电气工程学院
第4章 汇编语言程序设计
• 本章介绍以下内容 – 汇编语言源程序的结构 – 语句行的构成(汇编语言语句格式) – 指示性语句(伪指令) – 汇编语言程序设计及举例
Байду номын сангаас 4.2 指示性(伪指令)语句
• 伪指令语句没有对应的机器代码,并不 像指令语句那样由CPU来执行,它是由 MASM汇编程序对源程序汇编期间进行 处理的。主要完成变量定义,存储器分 配,指示程序开始和结束,段定义,段 分配等。
伪指令的类型
• 伪指令语句有如下几种类型:
数据定义伪指令 DB,DW,DD 符号定义伪指令 EQU,= 段定义伪指令 SEGMENT…ENDS 设定段寄存器伪指令 ASSUME 过程定义伪指令 PROC…ENDP 模块定义与连接伪指令 END,NAME
常用的术语
• 汇编语言语句可分为三种基本语句:指令语句、伪指 令语句和宏指令语句。 • 每一个指令语句在汇编时产生目标代码,对应着机器 的一种操作。如:MOV BX, 0 与ADD SI, AX 等,即 每一条指令语句对应着机器的一条或几条指令。 • 伪指令语句没有目标代码与之对应,主要是为汇编程 序服务的。 • 宏指令主要是为了简化程序的书写而设计的。若在汇 编语言源程序中某个程序段要多次使用,为了使在源 程序中不重复书写这个程序段,可以用一条宏指令来 代替。由汇编程序在汇编时产生所需的代码。
1.
• DB • DW • DD • DQ • DT
数据定义伪指令助记符
定义的变量为字节型 定义的变量为字类型(双字节) 定义的变量为双字型(4字节) 定义的变量为4字型(8字节) 定义的变量为10字节型
32
数据定义伪指令例
• DATA1 DB 11H,22H,33H,44H
• DATA2 DW 11H,22H,3344H • DATA3 DD 11H*2,22H,33445566H
1)算术运算符
共有7种算术运算符 +, -, * , /, MOD, SHL, SHR 说明:
/ (除,只取除法运算结果之商)、MOD(模,只 取除法运算结果之余数)、SHL(左移,左移1位相当 于乘2)、SHR(右移,右移1位相当于除2)。 所有的算术运算符均可以对数据进行运算,运算 对象与运算结果都是整数。若对地址运算,通常是在 标号上加/减某一个数字量,例如SUM+2、 CYCLE-3各表示一个存储单元的地址,对地址乘是 没有意义的。
[例 ]
• 源程序指令如下: – DA EQU 300 – MOV AX, DA-80 – MOV BX, DA MOD 100 – MOV CX, DA/100 – MOV DH, 01100100B SHR 1 • 汇编时,计算表达式形成指令为: DA EQU 300 MOV AX, 220 MOV BX, 0 MOV CX, 3 MOV DH, 32H
4.1 汇编语言源程序
• 用指令助记符、符号地址、标号和伪指令等 符号书写程序的语言称为汇编语言。用汇编 语言编写的程序称为汇编语言源程序。 • 把源程序翻译成机器语言程序(目标程序)的 过程叫做汇编。 • 完成汇编任务的程序叫做汇编程序,常用的 有ASM、MASM等。 • MASM称为宏汇编程序。
• 汇编语言源程序
•
用助记符编写
源程序的编译程序
汇编程序
汇编语言 源程序
汇编程序
机器语言 目标程序
4.1.1 汇编语言源程序的结构
• 8086汇编语言的源程序是分段的,每 一段都有名字,以符号SEGMENT作 为段开始,以语句ENDS作为段的结束。 两者都必须有名字,而且名字必须相 同。 • 由若干段组成一个源程序,整个源程 序以语句END作为结束。
4)取值运算符和属性运算符
• 取值运算符OFFSET、SEG
它们加在变量或标号前,返回运算对象的 某个参数值。例如偏移地址值、段地址值
SEG和OFFSET
• SEG返回一个存储单元的段地址。 • OFFSET返回每一个存储单元的段内偏移量。
例:DATA-SEG 是从存储器0500H处开始的 一个数据段。OP1是其中一个变量名,偏移 地址为1000H。 MOV AX, SEG OP1 MOV BX, OFFSET OP1
操作码
注释前加分号
CYCLE: CMP SUM,100
;SUM单元与100比较
伪指令语句
• 格式:
[名字] 伪指令指示符 操作数[,操作数…] [;注释]
变量的符号地址 其后不加冒号
指示性语句中至 少有一个操作数
THING
DB
?
;定义一个字节
4.1.3 数据项及表达式
1.常 量
• 数字常量
不同进制数表示的常量 用单引号引起的字符或字符串
4.2.1 数据定义伪指令
为一个数据项或数据表分配存储单元,用 一个符号名与这个或这些存储单元相联系,并为 这个数据项提供一个任选的初始值。 – 语句格式: 变量名 DB/DW/DD/DQ/DT 数据项表例 如:
• • •
•
THING DB ? BIG-THING DW ?
;定义一个字节 ;定义一个字 (两个字节) BIGGEST-THING DD ? ;定义一个双字 (四个字节) BUFFER DB 30 DUP(?) ;定义连续30个字节
以上变量在内存 中的存放形式
33
数据定义伪指令例_变量在内存中的分布
DATA3 DATA1
DATA2
11 22 33 44 11 00 22 00 44 33