微机原理第4章1
微机原理与应用-04 汇编语言

例:把片外RAM2200H单元中的数送入片内70H单元中。
BEGIN:MOV
MOV MOVX MOV
13
DPTR,#2200H ;(DPTR)=2200H
R0,#70H A,@DPTR @R0,A
南京航空航天大学机电学院机械电子工程系 2005年
《微机原理及应用》课件
1、标号字段
后必跟“ :”号; 首字符必是字母,由1~8个ASCII 码 字符组成; 同一标号在一个程序中只能定义一次; 不能使用指令助记符、伪指令、寄存器 的符号名称; 一条语句的标号可有可无,取决于本程 序的其他语句是否访问该条语句。
《微机原理及应用》课件
(2) 机器汇编
汇编语言 源程序
汇编
机器语言 目标程序
汇编程序
用机器汇编,方便快捷,并能在汇 编过程中发现语法错误。
8
南京航空航天大学机电学院机械电子工程系 2005年
《微机原理及应用》课件
Medwin汇编环境示例
9
南京航空航天大学机电学院机械电子工程系 2005年
《微机原理及应用》课件
《微机原理及应用》课件
2. 汇编语言
面向机器的符号语言,指令用助记符表示; 指令直接访问CPU的寄存器、存储单元和 I/O端口,响应速度快,程序的存储空间 利用较高; 汇编语言是面向机器的语言,因此使用者 必须对机器的硬件结构和指令系统比较熟 悉。
5
南京航空航天大学机电学院机械电子工程系 2005年
33
南京航空航天大学机电学院机械电子工程系 2005年
《微机原理及应用》课件
(2)子程序的参数传递
a. 利用寄存器(R0~R7和A)传递参数
微机原理与接口技术-第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
微机原理第四章课后习题答案

第四章课后作业(6—27)6.试按下列要求分别编制程序段。
(1)把标志寄存器中符号位SF置“1”。
(2)寄存器AL中高、低四位互换。
(3)由寄存器AX、BX组成一个32位带符号数(AX中存放高16位),试求这个数的负数。
(4)现有三个字节存储单元A、B、C,在不使用ADD和ADC指令的情况下,实现(A)+(B) C。
(5)用一条指令把CX中的整数转变为奇数(如原来已是奇数,则CX中数据不变,如原来是偶数,则(CX)+1 形成奇数)。
答:(1) LAHFOR AH,80HSAHF(2) MOV CL,4ROL AL,CL(3) MOV CX,0NEG BXJC CHGJMP GOCHG: MOV CX,1GO: NEG AXSUB AX,CX(4) MOV CL,AMOV AL,BMOV X,ALCHECK:INC XDEC CLJNZ CHECK(5) OR CX,0001H7.试给出下列各指令的机器目标代码。
(1)MOV BL,12H [SI](2)MOV 12H [SI],BL(3)SAL DX,1(4)AND 0ABH [BP] [DI],1234H答:(1)100010 1 0 01 011 100 00010010=8A5C12H(2)100010 0 0 01 011 100 00010010=885C12H(3)110100 0 1 11 100 010=0D1E2H(4)100000 0 1 10 100 011 10101011 00000000 00110100 00010010=81A3AB003412H8.执行下列指令:STR1 DW ‘AB’STR2 DB 16DUP(?)CNT EQU $-STR1MOV CX,CNTMOV AX,STR1HLT执行完成之后,寄存器CL的值是多少?寄存器AX的值是多少?答:因为CNT=16+2=18,所以CX=18=0012H,所以CL=12H=0001,0010;AX中装入的是‘AB’的ASCII码值,其中‘A’在高位AH中,‘B’在低位AL 中,所以AX=4142H=0100,0001,0100,0010。
微型计算机原理-第4章(4)微机原理与接口技术(第三版)(王忠民)

第四章 80x86 指令系统—累加器专用指令
⑴ 输入指令 ①直接寻址的输入指令 指令格式及操作:
IN acc, port ;(acc) ←(port)
②间接寻址的输入指令
指令格式及操作:
IN acc, DX
;(acc) ←((DX))
第四章 80x86 指令系统—累加器专用指令
⑵ 输出指令
①直接寻址的输出指令 指令格式及操作:
第四章 80x86 指令系统—通用数据传送指令
说明: *堆栈按后进先出原则组织。 *堆栈操作以字为单位进行。 *目的操作数dst不可以是CS。 *指令中的操作数不能是立即数。
第四章 80x86 指令系统—通用数据传送指令
例:已知(AX)=1234H,(BX)=5678H,分析下面程序段的执 行过程。
REG <=> REG/MEM • 段寄存器的内容不能参加交换
例: XCHG BX,[BP+SI]
第四章 80x86 指令系统—累加器专用指令
(二) 累加器专用指令 这类指令中的一个操作数必须是累加器。累加器操作数可以 是8位的,也可以是16位的。
第四章 80x86 指令系统—累加器专用指令 1.输入/输出指令
DI 1234H DS 4000H
DM
34H 2130H 12H 00H 2132H 40H
第四章 80x86 指令系统—地址传送指令
3. 地址指针装入ES指令 指令格式:
LES reg16, mem32 此指令的功能是将源操作数所对应的双字长的内存单元中的高 字内容(一般为16位段基址)送入ES,低字内容(一般为偏移地址) 送入指令所指定的寄存器中。例如:
LES DI, [2130H]
DI 1234H ES 4000H
微机原理 第四章 微型计算机指令系统

例: 已知: DS=2000H; SI=1000H 指令: MOV [SI+disp],AX
青岛理工大学琴岛学院
寄存器间接相对寻址过程示意图
CPU
寄存器间接相对 SI=1000H
MOV [SI+20H] 程序 ,AX
CS 偏移1000H
DS
SS
ES
位移20H
青岛理工大学琴岛学院
寄存器相对寻址过程示意图
真正数据所在的地址
青岛理工大学琴岛学院
错误指令举例: 6)基址变址寻址: MOV [BX+CX],AX ; CX不能做变址寄存器 MOV [BX+BP],AX ; BP不能作为变址寄存器 操作数的有效地址 EA等于一个基址寄存器( BX或 MOV [BX+DI],ARRAY; BP)与一个变址寄存器( SI或DI)的内容之和;
总时间=基本执行时间+计算EA的时间+执行总线读/写周期的时间
指令的基本执行时间随指令类型的不同差异很大,访问存 储器既要执行总线的读/写周期,又要计算操作数的有效地址 EA,计算EA的时间又与指令的寻址方式有关。
青岛理工大学琴岛学院
4.2 8086/8088指令系统
数据传送类指令
算术运算类指令 位操作类指令 串操作类指令 控制转移类指令 处理器控制类指令
21000H 20 位 物 理 地 址 真正数据所在的地址 Memory DS … 20000H
…
78H 21000H 56H
青岛理工大学琴岛学院
4)寄存器间接寻址:
此方式的操作数存放在存储器单元中,指令给出的 16位寄存器值就是该操作数所在存储单元的EA。
例: 已知: (DS)=2100H,(DI)=2000H 指令: MOV AX,[DI] ;(AX) ((DI)) 注:使用BX、SI、DI,操作数在DS段;BP时在SS段 其中寄存器只能是BX、SI、DI、BP
第4章(1)微机原理与接口技术(第三版)(王忠民)

第四章 80x86 指令系统—立即数寻址方式
MOV AX, 1234H
程序存储器
AH AL
12H 34H 操作码字节 指
34H 令
12H
码
第四章 80x86 指令系统—寄存器寻址方式
2)寄存器寻址方式 操作数存放在CPU的内部寄存器reg中:
8位寄存器r8: AH、AL、BH、BL、CH、CL、DH、DL 16位寄存器r16: AX、BX、CX、DX、SI、DI、BP、SP 4个段寄存器seg: CS、DS、SS、ES
微机原理与接口技术
西安邮电大学计算机学院 宁晓菊
第四章 80x86 指令系统(第一讲)
第一章 微型计算机系统导论(第一讲)
本章主要内容
1 80x86指令的寻址方式(3讲) 2 80x86指令系统(5讲)
第四章 80x86 指令系统(第一讲)
第一章 微型计算机系统导论(第一讲)
本讲主要内容
1 寻址方式概述 2 数据寻址方式之一:
80 21H
操作码
代
21H
码
AL
段
80
第四章 80x86 指令系统—I/O端口寻址方式
⑵ 间接端口寻址方式 MOV DX, 1234H OUT DX, AL
I/O接口 0001H
DX
12
34
0002H
……
AL
80 1234H
80
Thank you!
感谢
谢谢,精品课件 资料搜集
第四章 80x86 指令系统—立即数寻址方式
1)立即数寻址方式 指令中的操作数直接存放在机器代码中,紧跟在操
作码之后(操作数作为指令的一部分存放在操作码 之后的主存单元中)
微机原理第04章(寻址方式和传送指令)
2、指令组成 计算机中指令由操作码字段和操作数字段两部分组成。 一条可以由1~7个字节组成。 操作码字段-----―指示计算机要执行的操作, 操作数字段-----―指出在指令执行操作过程中所需要的操作数; 可以是操作数本身;可以是操作数地址或是地址的一部分;可以 是指向操作数地址的指针或其他有关 操作数的信息。
+ 1 1 SS 1000H 0 0 0 BP 3000H 0 ...
3 0 0 0 3 AH 12H 0 0 AL 34H 0
13000H
执行前: (SS)=1000H ,
(BP)=3000H , (AX)=1234H 执行后:PA=13000H (13000H)=1234H
34H 12H
堆 栈 段
55H
代 码 段
... 50000H 55040H ... 48H 55H ... 堆 栈 段
指令执行后:EA=5040H PA=55040H (55040H)=5548H (AX)=5548H
寄存器相对寻址方式 MOV AX,COUNT[BP]
用途:这种寻址方式同样用于表格处理。 表格首地址COUNT 修改基址或变址寄存器来取得表格中的值。 例:某数据表的首地址为COUNT 欲读取表中第10个数据,存放到(AL)中。
演示
;AX←DS:[SI+06H]
8086/8088 CPU 中有两个变址寄存器 : 源变址寄存器 SI ; 目的变址寄存器 DI 。
操作数一般在内存的数据段中,但允许段跨越。 除有段跨越前缀之外,形成物理地址有二种方式:
(BX) PA=16d ×(DS)+ (SI) (DI) + 16位位移量 8位位移量
段内偏移量为适应各种数据结构的需要,可以有几个部分组 成,所以也把它称为有效地址EA。
微机原理 第4章作业答案
第3章指令系统3.9 设段寄存器DS=1000H,SS=2000H,ES=3000H,通用寄存器BX=4000H,BP=5000H,SI=6000H,DI=7000H。
在下列各指令中指出存储器操作数的寻址方式,求出有效地址EA、物理地址PA,并分别用物理地址和逻辑地址说明指令执行结果。
(1)MOV CX, [2300H]直接寻址EA=2300HPA=DS*16+EA=1000H*16+2300H=12300H 执行结果:(12300H)→CL,(12301H)→CH (2)MOV BYTE PTR [BX], 8FH寄存器间接寻址EA=BX=4000HPA=DS*16+EA=1000H*16+4000H=14000H 执行结果:8FH→(14000H)(3)MOV DH, [BP+3000H]基址寻址EA=BP+3000H=8000HPA=SS*16+EA=2000H*16+8000H=28000H 执行结果:(28000H)→DH(4)MOV ES: [SI+1210H], AX变址寻址EA=SI+1210H=7210HPA=ES*16+EA=3000H*16+7210H=37210H 执行结果:AL→(37210H),AH→(37211H) (5)MOV [BX+DI+50H], AL基址变址位移寻址EA=BX+DI+50H=0B050HPA=DS*16+EA=1000H*16+0B050H=1B050 H执行结果:AL→(1B050H)(6)INC WORD PTR [BX+SI]基址变址寻址EA=BX+SI=0A000HPA=DS*16+EA=1000H*16+0A000H=1A000 H执行结果:(1A000H)中存放的字的值加13.11 指出下列指令中源操作数的寻址方式。
(1)MOV BL, 0F9H 立即寻址(2)ADD [BX], SI 寄存器寻址(3)SUB CL, [4000H] 直接寻址(4)CMP DX, [SI] 寄存器间接寻址(5)AND SL, [BX+1] 基址寻址(6)OR BP, [DI+2100H] 变址寻址(7)XOR AX, [BP+SI] 基址变址寻址(8)MOV CX, 300 立即寻址3.12 下列指令都是非法的,指出各指令错在哪里?(1)MOV SI, AH两个操作数字长不一致(2)MOV 70H, BL立即数不能做目的操作数(3)MOV CX, F123H十六进制的数以字母打头必须在前面补0 (4)MOV [BX], 6AH两个操作数的字长不确定(5)MOV ES, 5000H立即数不能直接送段寄存器(6)MOV [DI], [3000H]两个操作数不能同为内存操作数(7)MOV DS, SS两个操作数不能同为段寄存器(8)MOV CS, AX不能对CS赋值(9)MOV AL, [CX]寄存器间接寻址中不能使用CX(10)MOV [BX+BP], DX存储器寻址方式中表示有效地址不能同为两个基址寄存器(11)MOV BH, [SI+DI+2]存储器寻址方式中表示有效地址不能同为两个变址寄存器(12)PUSH AL入栈出栈操作必须以字为单位(13)LEA AX, BXLEA指令中源操作数必须为存储器寻址方式(14)LDS BL, [5100H]LDS指令中目的操作数必须为16位的通用寄存器(15)IN AH, DXIN指令中目的操作数必须为AL或AX (16)OUT 288H, AL输入输出指令中端口地址为16位,必须先送给DX(17)ADD [2400H], 1234H两个操作数的字长不确定(18)XOR [2500H], [BX+10H]两个操作数不能同为内存操作数(19)INC [SI]操作数的字长不确定(20)MUL 10MUL指令的操作数不能为立即数(21)IDIV [BP+DI+1300H]操作数的字长不确定(22)SAL AL, 2移位次数大于1必须先送给CL3.14 设SP=2000H,AX=3000H,BX=5000H,执行以下3条指令后,问SP=?AX=?BX=? PUSH AX ;SP减2,栈顶元素为3000HPUSH BX ;SP减2,栈顶元素为5000HPOP AX ;SP加2,将栈顶元素5000H弹出至AX结果:SP=1FFEH,AX=5000H,BX=5000H3.16 下列程序执行完后,AX=?BX=?CX=? MOV AX, 1122HMOV BX, 3344HPUSH AX ;栈顶元素为1122H POP CX ;将栈顶元素1122H 弹出至CXXCHG BX, CX ;BX=1122H,CX=3344HLEA CX, [BX] ;CX=BX=1122H结果:AX=1122H,BX=1122H,CX=1122H3.17 CPU分别执行下列各程序段后,写出各个执行结果的状态标志位OF、SF、ZF、AF、PF、CF的值。
微机原理课后习题答案
第二章1.8086CPU由哪两部分组成?它们的主要功能是什么?8086CPU由总线接口部件BIU和指令执行部件EU组成,BIU和EU的操作是并行的。
总线接口部件BIU的功能:地址形成、取指令、指令排队、读/写操作数和总线控制。
所有与外部的操作由其完成。
指令执行部件EU的功能:指令译码,执行指令。
2.8086CPU中有哪些寄存器?各有什么用途?8086CPU的寄存器有通用寄存器组、指针和变址寄存器、段寄存器、指令指针寄存器及标志位寄存器PSW。
4个16位通用寄存器,它们分别是AX,BX,CX,DX,用以存放16位数据或地址。
也可分为8个8位寄存器来使用,低8位是AL、BL、CL、DL,高8位是AH、BH、CH、DH,只能存放8位数据,不能存放地址。
指针和变址寄存器存放的内容是某一段内地址偏移量,用来形成操作数地址,主要在堆栈操作和变址运算中使用。
段寄存器给出相应逻辑段的首地址,称为“段基址”。
段基址与段内偏移地址结合形成20位物理地址。
指令指针寄存器用来存放将要执行的下一条指令在现行代码中的偏移地址。
16位标志寄存器PSW用来存放运算结果的特征,常用作后续条件转移指令的转移控制条件。
5.要完成下述运算或控制,用什么标志位判断?其值是什么?⑴比较两数是否相等?将两数相减,当全零标志位ZF=1时,说明两数相等,当ZF=0时,两数不等。
⑵两数运算后结果是正数还是负数?用符号标志位SF来判断,SF=1,为负数;SF=0,为正数。
⑶两数相加后是否溢出?用溢出标志位来判断,OF=1,产生溢出;OF=0,没有溢出。
⑷采用偶校验方式。
判定是否要补“1”?用奇偶校验标志位判断,有偶数个“1”时,PF=1,不需要补“1”;有奇数个“1”时,PF=0,需要补“1”。
(5)两数相减后比较大小?●ZF=1时,说明两数是相等的;●ZF=0时:无符号数时,CF=0,被减数大;CF=1,被减数小。
带符号数时,SF=OF=0或SF=OF=1,被减数大;SF=1,OF=0或SF=0,OF1,被减数小。
微机原理习题答案4
微型计算机原理第4章习题参考答案4.1已知某数据段中有COUNT1 EQU 16HCOUNT2 DW 16H下面两条指令有何异同。
MOV AX,COUNT1MOV BX,COUNT2解: 同:执行完之后,AX=BX=16H异:MOV AX,COUNT1向AX中传送的是立即数,而MOV BX,COUNT2向BX中传送的是变量内容。
4.2下列程序段执行后,寄存器AX、BX和CX的内容分别是多少?ORG 0202HDA-WORD DW 20HMOV AX,DA-WORD ;AX=0020HMOV BX,OFFSET DA-WORD ;BX=0202HMOV CL,BYTE PTR DA-WORD ;CL=20HMOV CH,TYPE DA-WORD ;CH=02H解: AX=0020H,BX=0202H,CX=0220H4.3设平面上有一点P的直角坐标(x,y),试编制完成以下操作的程序:如P点落在第I象限,则K=I;如P点落在坐标轴上,则K=0。
解:DAT SEGMENTmsg db 'please input number only!$'MSG1 DB 10,13,'INPUT X:$'MSG2 DB 10,13,'INPUT Y:$'xbuf db 20,0xbuf1 db 20 dup(?)ybuf db 20,0ybuf1 db 20 dup(?)D1 DB 10,13,'K='D2 DB '?,$'DAT ENDSCOD SEGMENTASSUME CS:COD,DS:DA TBG: MOV AX,DATMOV DS,AXmov dx,offset msgmov ah,9int 21hMOV DX,OFFSET MSG1MOV AH,9INT 21Hmov dx,offset xbufMOV AH,0AHINT 21HMOV DX,OFFSET MSG2MOV AH,9INT 21Hmov dx,offset ybufMOV AH,0AHINT 21HCMP ybuf1,'0'JE PRO1CMP xbuf1,'0'JE PRO1cmp xbuf1,'-'Jz PRO2CMP ybuf1,'-'Je PRO4MOV D2,'1'JMP SHOWPRO1: MOV D2,'0'JMP SHOWPRO2: CMP ybuf1,'-'Je PRO3MOV D2,'2'JMP SHOWPRO3: MOV D2,'3'JMP SHOWPRO4: MOV D2,'4'SHOW: MOV DX,OFFSET D1MOV AH,9INT 21Hmov ah,4chint 21hCOD ENDSEND BG4.4 试编制一程序,把CHAR1中各小写字母分别转换为对应的大写字母,并存放于CHAR2开始的内存单元中。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(1)OFFSET
格式: OFFSET 变量或标号
功能:返回标号或变量的偏移地址值(取标号或变量的 偏移地址)。
(2)SEG
格式: SEG 变量或标号 功能:用于取标号或变量的段基值。 例如: MOV AX, SEG M1 MOV DS, AX
(3)TYPE 格式: TYPE 变量或标号 功能:加在变量前,返回变量的类型属性。 TYPE运算符的返回值如下:
COUNT=COUNT+10 MOV AX, [COUNT]
注意:伪指令DB与EQU的区别
BUF1 DB 0AFH;表示在存储单元BUF1 中存放了数值AFH。 BUF1 EQU 0AFH;表示BUF1就代表了AFH。
三、 段定义伪指令 1、段定义语句SEGMENT和ENDS 一般地,一个完整的汇编源程序由3个段组成,即代码段、 堆栈段和数据段。段定义伪指令可将源程序划分成若干段,以便 生成目的代码和连接时将各同名段进行组合。 格式:段名 SEGMENT [定位类型] [组合类型] [„分类名’] 段名 ENDS
字节(DB)
字(DW) 双字(DD) 四字(DQ)
1
2 4 8
NEAR(内直) -1(FFH)
FAR (间直) -2(FEH)。
(4)LENGTH 格式: LENGTH 变量 功能:当变量中使用DUP时, LENGTH返回此变量所包 含的单元数,对其他变量则返回1。 (5) SIZE 格式: SIZE 变量 功能:返回变量所包含的总字节数。 LENGTH和SIZE只应用于数据存储器操作数(即用 DB/DW/DD等定义的操作数) 。 SIZE= LENGTH* TYPE
助记符字段说明伪指令的伪操作,常用的有以下几种: DB:定义字节,其后的每个操作数都占有一个字节。 DW:定义字,其后的每个操作数都占有一个字。低位字节 在低地址单元中,高位字节在高地址单元中。
பைடு நூலகம்
DD:定义双字,其后的每个操作数占有二个字。
DQ:定义4字长,其后的每个操作占有四个字。 DT:定义10个字节长。其后的每个操作数占有十个字节。 操作数:可以使常数、字符串、变量、标号、表达式等,多 个操作数之间用‚,‛隔开。
注意:SEGMENT和ENDS应成对使用,缺一不可。其中段名是 不可省略的, SEGMENT和ENDS前的段名必须相同。其它是可 选项,是赋予段名的属性,可以省略。 例如: DATA SEGMENT
DW 20DUP(?) DATA ENDS
定位类型:对该段起始地址定位。
PARA(节的整数边界,即16的整数倍),BYTE(任何字节单 元),WORD(字边界,即偶数),PAGE(页边界,即256的 整数倍)。
标号字段:是一个任选字段,性质为符号偏移量,一般用于标记 跳转指令的目的地址.在汇编过程中标号会被替换为一个16位的 数值偏移量.标号必须位于语句开头,结尾必须使用冒号。 操作码字段:也称为指令助记符,指令助记符是必不可少的,指 出计算机所要执行的操作(或操作类型),是一种助记符。
4.4 DOS系统功能调用和BIOS中断调用
ASSUME CS:CODE,DS:DATA,SS:STACK MOV AX,DATA ;DATA段值送AX MOV DS,AX ;AX内容送DS,DS才有实际段值
CODE ENDS
注意2:当程序运行时,由于DOS的装入程序负责把CS初 始化成正确的代码段地址,SS初始化为正确的堆栈段地址,
因此用户在程序中就不必设置。但是,在装入程序中DS寄
例如:
END
START
;表明该程序的启动地址为START。
1. 指令:让计算机完成某种操作的命令称为指令。 2. 指令系统:指令的集合即为指令系统。 3. 指令的一般格式: [标号:] 操作码 [操作数] [,操作数] ;[注释] 计算机中的指令由标号、操作码字段和操作数字段组成。
[ ]:任选项。
分类名:必须用单引号 ‘ ’ 括起来。选择不超过40个字符的 名称,用于连接时将所有分类名相同的逻辑段组成一个段组。
2、段分配语句ASSUME
格式: ASSUME CS:段名,DS:段名SS:段名,ES:段名, 功能:通知汇编程序,哪一个段寄存器是该段的段寄存器,以便 对使用变量或标号的指令汇编出正确的目的代码。在段名中,一 般CODE表示代码段,DATA表示数据段,STACK表示堆栈段。 注意1:由于ASSUME伪指令只指明某一个段地址应存于哪一个 段寄存器中,并没有包含将段地址送入该寄存器的操作。因此要 将真实段地址装入段寄存器还需用汇编指令来实现。这一步是不 可缺少的。 例如:CODE SEGMENT
组合类型:提出各个逻辑段之间的组合方式。 NONE(各段独立,不进行连接),PUBLIC(与其它模块中的 同名段连接时,地址由低到高),COMMON(连接时,与其 它模块中的同名段有相同的起始地址,采用覆盖方式,以最长 的长度为主),AT表达式(起始地址在节的整数边界上), STACK(指定堆栈段),MEMORY(连接时,与其它模块中 的同名段有相同的起始地址,采用覆盖方式,以第一个为主)。
当一个定义的存储区内的每个单元要放置同样的数据或在存 储器中预留多个存储单元时,可用DUP 定义重复变量操作符。 格式: n DUP(?) )‛中为要重复的数据。
其中:n 为重复的次数,‚(
如:BUF DB 100DUP(0)
;表示以BUF为首地址的100个字节中存放00H数据。
BUF1 DB 100 DUP(?)
上述变量定义中,BUF1从DATA段偏移地址为0的单元开始 存放,而BUF2则从DATA段偏移为2000H的单元开始存放,两 者不是连续存放。
2、 汇编结束伪指令END 该伪指令表示源程序的结束.令汇编程序停止汇编。 因此,任何一个完整的源程序在最后均应有END指令。 格式: END [表达式]
其中:表达式表示该汇编程序的启动地址。
3.修改属性运算符PTR 属性运算符用来给指令中的操作数指定一个临时属性,而暂 时忽略当前的属性。 PTR作用于操作数时,忽略操作数当前的类型(字节或字)及 属性(NEAR或FAR),而给出一个临时的类型或属性。 格式:类型 PTR 表达式 功能:将PTR 左边的类型属性赋给右边的变量或标号。 PTR本身 并不分配存储单元,仅给以分配的存储单元赋予新的属性,以保 证运算时操作数类型的匹配。 特点:不单独使用,与8086指令一起使用。 类型:BYTE:字节
即NEAR和FAR。
四、MASM中的表达式 表达式由运算对象(常数、变量、标号和地址)和运算符组成。 1.算术运算符、逻辑运算符和关系运算符 算术运算:+、-、×、÷、MOD(模除)、SHL、SHR
逻辑运算:AND、OR、 NOT 、 XOR
关系运算:EQ/NE/LT/GT/LE/GE(相等/不等/小于/大于/小于 等于/大于等于),结果为真,则返回0FFFFH,假则为0。 2. 数值返回运算符SEG、OFFSET、TYPE、 LENGTH和SIZE 加在变量或标号前,返回运算对象的某个参数值(如:段地 址值、偏移地址值、类型属性、变量包含的单元数、单元数)。
WORD:字 DWORD:双字
例如1:BUF DW 25
此时BUF已定义成字单元。若我们想取出它的第一 个字节内容,则可用PTR对其作用,使它暂时改变为字节 单元,即 MOV AL,BYTE PTR BUF
例如2:
JMP DWORD PTR [1000H]
;转移地址放在1000H开始的4个单元中,
低2个 字节为偏移量,高2个字节为段地址。
4.3 伪指令语句
一、数据定义及定义存储单元伪指令 功能:该类伪指令用来定义存储空间及其所存数据的长度。 格式:[变量] 助记符 操作数[,操作数][;注释]
变量字段是可选项,它用符号表示,其作用与指令语句前的 标号相同,但它的后面不跟冒号。汇编程序汇编时使其记以 第一个字节的偏移地址。
4.1 汇编语言程序格式
一. 指令性语句
指令性语句是指汇编程序可将其汇编成目标代码,能被机
器执行的语句。 二. 伪指令语句 伪指令用于对汇编程序进行控制,它不像指令性语句那 样是在程序运行期间由计算机来执行的,是在汇编程序对源 程序汇编期间由汇编程序处理的操作,不产生目的代码。可 以完成如数据定义、分配存储区、指示程序结束等功能。 格式: 名字 伪指令指示符 操作数[,操作数] [;注释]
如:
DA1
DA2 FIRST THIRD
DB
DW DB DB
10H,52H
1122H,34H „HELLO‟ „OK‟ „OK‟
SECOND DW
TABLE
DB
?
”?‛表示在TABLE单元中没有存放初值,TABLE单元中的 内容是随机的,在汇编过程中在TABLE单元处留出一个单元, 用户可以用这样的存储单元存放中间数据、运算结果。
计算机的硬件环境必须在操作系统的管理下才能工作。
裸机:缺少操作系统的计算机。 操作系统可分为:磁盘操作系统(DOS)、Windows、Linux等。 DOS命令:DIR、CD、COPY、PRINT、FORMAT 等 。 DOS的管理功能:管理I/O设备、磁盘和文件。一部分固化在 ROM(称为DOS BIOS)中,另一部分存放在磁盘中。 DOS 的BIOS应用:系统启动时,被调入内存,用户的应用程序 和 DOS操作系统通过软件中断来调用它们。
五、程序开始和结束语句 1、ORG 伪指令 ORG伪指令给汇编程序设置位置指针,指定下面的程序或 数据代码存放的起始偏移地址。 格式: ORG <表达式> 例如: DATA SEGMENT
BUF1 BUF2 DATA DB 23,56H,‘EOF‟ DB „STRING‟ ENDS
ORG 2000H
第四章
汇编语言程序设计
利用汇编语言编辑源程序(*.asm ),通过汇编程序翻译 成二进制代码的目标文件(*.obj .lst .crf ),再经过与库文 件的链接,最后得到可执行文件(*.exe .map .lst )程序,才 能在机器上直接运行。 4.1 汇编语言程序格式 4.2 MASM的表达式 4.3 伪指令 4.4 DOS系统功能调用和BIOS中断调用 4.5 程序设计方法