第三章 汇编语言程序设计基础
2.汇编指令
汇编指令----用来表示机器指令的助记符。每一条机器指令 对应一条汇编指令。
汇编语言(Assembly Language) ----由助记符构成的 指令系统。
汇编语言源程序----用汇编语言编写的程序。 “汇编”(Assemble)----将汇编语言程序和高级语言程
序翻译成机器语言程序的过程。 汇编程序----完成汇编的程序(MASM.EXE)
LODS/LODSB/LODSW(load Byte or Word String)取字 节串或字串。
以上各条指令前均可使用重复前缀指令,与上述基本指令配 合使用的前缀有: REP(repeat)重复 REPE/REPZ(repeat while equal/zero)相等/为零则
重复 REPNE/REPNZ(repeat while not equal/not zero)不
代码指令------用“0”或“1”形式表示的机器指令, 是机器指令的数据表示形式,是能被计算机直接识别 和执行的二进制代码串。
机器语言程序------用机器语言或代码语言编写的程序。 指令系统------计算机全部指令的集合。
优点:能被计算机直接理解和执行; 缺点:编程繁琐,不直观,难记忆,易出错,难查错。
2、累加器专用指令
IN(input)输入 OUT(output)输出 XLAT(translate)换码
3、地址传送指令
LEA(load effective address)有效地址送寄存器 LDS(load DS with pointer)指针送寄存器和 DS LES(load ES with pointer)指针送寄存器和 ES
3、测试某个标志的条件转移指令
1)测试ZF
① JE/JZ(jump if zero, or equal) JE指令(相等则转移) JZ指令(等于0转移)
② JNE/JNZ(jump if not zero, or not equal) JNE指令(不相等则转移) JNZ指令(不等于0转移)
2)测试CF
① JC(jump if carry): 当满足CF=1时,转移到目标地址。 ② JNC(jump if not carry):当满足CF=0时,转移到目标地址。
3、测试某个标志的条件转移指令
3)测试SF
① JS(jump if sign)指令(为负转移) ② JNS(jump if not sign)指令(为正转移)
③ JL/JNGE(jump if less, or not greater or equal ) JL指令(小于转移) JNGE指令(不大于等于转移)
④ JLE/JNG(jump if less or equal, or not greater) JLE指令(小于等于转移) JNG指令(不大于转移)
优点:编写的程序生成的目标代码精简,占内存少,执行速 度快;
缺点:程序所要解决的问题与数学模型之间的关系不直观, 程序设计和调试的时间也比较长,可移植性较差。
适应场合:内存容量和速度要求比较高
3.编语言程序建立及处理过程
编辑程序 EDIT
A.ASM 文件
汇编程序 MASM
A.OBJ 文件
连接பைடு நூலகம்序 LINK
RET(RETurn from procedure)从过程返回。(从子程序 返回)。
JMP(JUMP)转移
2、条件转移指令
其中“高于和低于”适用于操作数为无符号数的判别。例如 0FFH高于 05H。而‘大于和小于”是用于操作数为带符号数 的判别。例如 0FFH小于 05H。因为前者为-1。 条件指令常在比较或减法指令之后使用。
4)测试PF
① JP/JPE(jump if parity, or parity even)指令(为偶转 移)
② JNP/JPO(jump if not parity, or parity odd)(为奇转 移)
5)测试OF
① JO(jump if overflow)指令(溢出转移) ② JNO(jump if not overflow)指令(未溢出转移)
JCXZ(Jump if register CX=0)若寄存器(CX)=0,则 转移。
3.3 源程序典型结构
本节的目的在于告诉读者,如何书写一个完整的汇编 语言源程序。
一个标准的单模块汇编语言源程序 书写形式示例
段寄存器初值的设置 DOS 下汇编语言程序的正常结束
第一节 DATA SEGMENT
1)判断无符号数大小的条件转移指令
① JA/JNBE(jump if not blow or equal , or above) JA指令(高于转移) JNBE指令(不低于等于转移)
② JBE/JNA(jump if blow or equal , or not above) JBE指令(低于或等于转移) JNA指令(不高于转移)
……;
标准;定单义数模据段块汇编语言程序
书写形式示例 DATA ENDS
STACK SEGMENT STACK;定义堆栈段
……;
STACK ENDS
CODE SEGMENT
;定义代码段
ASSUME CS:CODE,DS:DATA,ES:DATA,SS:STACK
START: MOV AX,DATA;
整 DAS(decimal adjust for subtraction)减法的十进制
调整
3、乘法指令
MUL(unsigned multiple)无符号二进制数相乘 IMUL(signed multiple)带符号二进制数相乘 AAM(ASCII adjust for multiplication)乘法的
第3章 汇编语言程序设计基础
3.1 基本概念 3.2 8086指令系统 3.3 源程序典型结构 3.4 变量、程序中数据组织
3.1 基本概念
1.机器指令和代码指令
机器指令------是能为计算机所能接受的一组代码。它 指出计算机所要进行的操作及其操作对象。机器指令 是由二进制代码组成的。
2、减法指令
SUB(subtract)字节或字相减 SBB(subtract with borrow)带借位的字节或字相减 DEC(decrement)字节或字减1 NEG(negate)字节或字求补 CMP(compare)字节或字的比较 AAS(ASCII adjust for subtraction)减法的ASCII码调
4、迭代控制指令
这些指令用来完成循环控制的判断转移操作。其转移的目的地 址必须在相对该指令的下一指令所在地址位移-128~+127 范围内.
格式:LOOP循环标号
LOOPE/LOOPZ(LOOP if equal/zero)若相等/为0,则 循环。
LOOPNE/LOOPNZ(LOOP if not equal/not zero)若不 相等/不为0,则循环。
① JG/JNLE(jump if greater, or not less or equal) JG指令(大于转移) JNLE措令(不小于等于转移)
② JGE/JNL(jump if greater or equal, or not less) JGE指令(大于等于转移) JNL指令(不小于转移)
第三节 逻辑运算和移位类
1、逻辑运算指令
NOT(not)字节或字求反 AND(and)字节或字逻辑与 OR(or)字节或字逻辑或 XOR(exclusive or)字节或字逻辑异或 TEST(test)字节或字的测试
2、移位和循环移位指令
SHL (shift logical left)逻辑左移 SAL(shift arithmetic left)算术左移 SHL(shift logical right)逻辑右移 SAR(Shift arithmetic right)算术右移 ROL(rotate left)循环左移 ROR(rotate right)循环右移 RCL(rotate left through carry)带进位循环左移 RCR(rotate right through carry)带进位循环右移
相等/不为零则重复
格式为:重复前缀 串操作指令 目的串,源串
第五节 控制转移指令类
8086/8088指令系统中有一组指令用于控制程 序的转移,这些指令有的只修改IP的内容,有的 则同时修改IP和CS的内容。这组控制程序转移 的指令可再分为三组。
1、无条件转移指令
CALL(CALL a Procedure)调用一个过程指令(转子指 令)。
A.EXE 文件
计算机上运行汇编语言程序的步骤是: 1)用编辑程序建立.ASM源文件; 2)用MASM程序把.ASM文件转换成.OBJ文件; 3)用 LINK程序把 .OBJ文件转换成.EXE文件; 4)在操作系统环境下直接键入文件名就可执行该程
序。
3.2 8086指令系统
8086/8088的指令系统按功能可以分为六类: 数据传送 算术运算 逻辑运算与移位 字符串处理 控制转移以及处理器控制
ASCII码调整
4、除法指令
DIV(unsigned divide)无符号二进制数相除 IDIV(signed divide)带符号二进制数相除 AAD(ASCII adjust for division)除法的ASCII码调
整 CBW(convert byte to word)字节变换为字 CWD(convert word to double word)字变换为双字
4、标志寄存器传送指令
LAHF(1oad AH with flags)标志送 AH SAHF(store AH into flags) AH送标志寄存器 PUSHF(push the flags)标志进栈 POPF(pop the flags )标志出栈
第二节 算术运算类
汇编语言程序设计基础
汇编语言程序设计基础汇编语言是一种底层编程语言,与高级语言相对应。
而汇编语言程序设计则是通过使用汇编语言来编写计算机程序的过程。
在学习和理解汇编语言程序设计的基础上,程序员可以更深入地了解计算机的底层工作原理,并且能够编写与硬件更接近的程序代码。
一、了解汇编语言的历史和背景汇编语言的诞生可以追溯到计算机的发展早期,当时的计算机使用的是机器语言编程,这种语言非常底层,包含了计算机指令的二进制表示形式。
为了简化编程过程并提高程序可读性,汇编语言应运而生。
它使用了助记符(mnemonic)来代替机器指令的二进制表示,让程序员更容易理解和编写程序。
二、汇编语言的特点和优势汇编语言有一些独特的特点和优势,使得它在一些特定的应用场景中得到广泛应用。
1. 直接访问底层硬件:与高级语言相比,汇编语言更接近计算机硬件,可以直接操作和访问寄存器、内存和设备等底层资源,从而提高程序性能和控制能力。
2. 程序执行效率高:由于汇编语言的指令是直接对应机器指令的,不经过翻译和解释,所以执行效率非常高,适用于对速度要求较高的场合。
3. 灵活性和可优化性:使用汇编语言可以更加灵活地控制程序的执行流程,针对特定的应用需求进行优化,提高程序的效率和性能。
三、汇编语言的基本元素和语法1. 寄存器:汇编语言中的寄存器是一块由硬件实现的高速存储区域,可以存储临时数据和操作数,常用的寄存器有通用寄存器、特殊用途寄存器等。
2. 指令:汇编语言通过指令来告诉计算机应该执行的操作,包括数据传输、算术运算、逻辑运算、条件分支、循环控制等。
3. 内存:汇编语言使用内存来存储程序和数据,通过地址来访问内存中的内容。
四、汇编语言程序设计的实际应用汇编语言程序设计在一些特定的场景中有着广泛的应用,如嵌入式系统开发、驱动程序开发、嵌入式设备调试等。
1. 嵌入式系统开发:嵌入式系统常常对计算能力、存储空间和功耗等有严格的要求,使用汇编语言可以精确控制系统资源,提高系统性能和响应速度。
汇编语言程序设计(第四版)第3章【课后答案】
汇编语言程序设计第四版【课后习题答案】--囮裑為檤第3章汇编语言程序格式〔习题3.1〕伪指令语句与硬指令语句的本质区别是什么?伪指令有什么主要作用?〔解答〕伪指令语句与硬指令语句的本质区别是能不能产生CPU动作;伪指令的作用是完成对如存储模式、主存变量、子程序、宏及段定义等很多不产生CPU动作的说明,并在程序执行前由汇编程序完成处理。
〔习题3.2〕什么是标识符,汇编程序中标识符怎样组成?〔解答〕为了某种需要,每种程序语言都规定了在程序里如何描述名字,程序语言的名字通常被称为标识符;汇编语言中的标识符一般最多由31个字母、数字及规定的特殊符号(如-,$,?,@)组成,不能以数字开头。
〔习题3.3〕什么是保留字,汇编语言的保留字有哪些类型,并举例说明。
〔解答保留字是在每种语言中规定了有特殊意义和功能的不允许再做其它用处的字符串;汇编语言的保留字主要有硬指令助记、伪指令助记符、运算符、寄存器名以及预定义符号等。
汇编语言对大小写不敏感。
如定义字节数和字符串的DB就是伪指令助记符。
〔习题3.4〕汇编语句有哪两种,每个语句由哪4个部分组成?〔解答〕汇编语句有执行性语句和说明性语句;执行性语句由标号、硬指令助记符、操作数和注释四部分组成;说明性语句由名字、伪指令助记符、参数和注释四部分组成〔习题3.5〕汇编语言程序的开发有哪4个步骤,分别利用什么程序完成、产生什么输出文件。
〔解答〕⒈编辑文本编辑程序汇编语言源程序.asm⒉汇编汇编程序目标模块文件.obj⒊连接连接程序可执行文件.exe或.com⒋调试调试程序应用程序〔习题3.6〕区分下列概念:(1)变量和标号(2)数值表达式和地址表达式(3)符号常量和字符串常量〔解答〕(1)变量是在程序运行过程中,其值可以被改变的量;标号是由用户自定义的标识符,指向存储单元,表示其存储内容的逻辑地址。
(2)数值表达式一般是由运算符连接的各种常数所构成的表达式,地址表达式是由名字、标号以及利用各种的操作符形成的表达式。
专题四 MCS-51指令系统-第三章 单片机的指令系统
8、指令字节数和机器周期数
第三章 单片机的指令系统
是必须掌握的内容。 Ø 一台计算机所有指令的集合, 称为该计算机的指令系统。 Ø 各种计算机都有专用的指令系统。
Ø 本章主要介绍单片机的寻址方式及指令系统,
学时分配:2学时 1—53+97+98+99 2学时 54—96 100
第三章 单片机的指令系统 • 3.1 MCS-51 指令系统概述
类
按指令字长分类
按指令执行时间分类
3.2 寻址方式
• 寻址方式:7种
– – – – – – – – – 寄存器寻址 直接寻址 寄存器间接寻址 立即寻址 变址间接寻址 相对寻址 位寻址 寻址方式与寻址空间 MCS-51单片机的两个突出特点
寄存器寻址——操作数存放在寄存器中
寄存器为 MOV A,R0 MOV R0,#01001111B R0~R7,A,DPTR,C SETB RS0 MOV R3,#56H
目的寻址为直接寻址
2) 20H ~2FH 可位寻址区的寻址方式
字节寻址方式: 直接寻址 direct
寄存器间接寻址@R0,@R1
位寻址: bit 直接寻址
例: MOV 26H,C ; 位寻址 (26H)1位
MOV 26H,A ;字节寻址(26H)8位
3) 30H ~7FH 数据缓冲区的寻址方式
字节寻址方式: 直接寻址 direct
MOV A,#23H
PUSH ACC
;
A寄存器寻址
POP
0E0H
;直接寻址
4、可做片内RAM的指针有:
R0,R1, 四个组共有8个 预先设置RS1、RS0,以选定组。 SETB RS0 CLR RS1; 1组
第3章汇编程序设计PPT教学课件
BIGE _THING DD ?;定义一个双字
+1 43H
BIG _ THING
56H
变量就代表低字节的 单元地址
2020/12/10
思考: MOV THING,13 的操作数寻址方式
14
定义数据表:
POWERS DB 1,2,4,8,16
ALL DB 0,0,0,0
ALL DB 4DUP(0)
类型 PTR 表达式 TW DW 23 MOV AL,BYTE PTR TW THIS:类型在THIS中指定,段地址和段内偏移量就是汇 编时的当前值。 EQU THIS 类型 MYDATA SEGMENT BB EQU THIS WORD BUFF DB 100 DUP(0) MYDATA ENDS
3.标号:某条指令所存放存储单元的符号地址,它 是转移指令或调用指令的目标操作数,属性 包 括 段值、偏移量和类型(NEAR,FAR)。
2020/12/10
NEAR—转移指令或调用指令与此标号所指的语句 或过程在同一段内,所以只需要改变IP。
FAR—转移指令或调用指令与此标号所指的语句 或过程不在同一段内,所以不但需要改变IP, 还要改变CS。
2020/12/10
11
3.3指示性语句
符号定义语句 数据定义语句 段定义语句 过程定义语句 结束语句
2020/12/10
12
3.3.1符号定义语句
1. 等值语句 EQU
符号名 EQU 表达式或常量或符号名
COUNT EQU CX
EQU语句在未解除前,不能重新定义
2. 等号语句 = 能对符号进行再定义。
第3章 汇编语言程序设计
3.1汇编语言的格式
3.2语句行的构成
钱晓捷新版汇编语言程序设计习题答案(1-4)
钱晓捷新版汇编语言程序设计习题答案第一章汇编语言基础知识1.17、举例说明CF和OF标志的差异。
溢出标志OF和进位标志CF是两个意义不同的标志进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确•例1:3AH + 7CH=B6H无符号数运算:58+124=182,范围内,无进位有符号数运算: 58+124=182 ,范围外,有溢出•例2:AAH + 7CH=(1)26H无符号数运算:170+124=294,范围外,有进位有符号数运算:-86+124=28 ,范围内,无溢出1.20、8086有哪4种逻辑段,各种逻辑段分别是什么用途?(解答)代码段(Code Segment)用来存放程序的指令序列。
处理器利用CS : IP取得下一条要执行的指令•堆栈段(Stack Segment)确定堆栈所在的主存区域。
处理器利用SS : SP操作堆栈中的数据•数据段(Data Segment)存放当前运行程序所用的数据。
处理器利用DS : EA存取数据段中的数据•附加段(Extra Segment)是附加的数据段,也用于数据的保存。
处理器利用ES : EA存取数据段中的数据第二章8086指令系统2.1已知DS = 2000H、BX = 0100H、SI = 0002H,存储单元[20100H] ~ [20103H]依次存放12 34 56 78H,[21200H] ~ [21203H]依次存放2A 4C B7 65H,说明下列每条指令执行完后AX寄存器的内容。
(1) mov ax,1200h ;AX=1200h(2) mov ax,bx ; AX=0100h(3) mov ax,[1200h] ; AX=4C2Ah(4) mov ax,[bx] ; AX=3412h(5) mov ax,[bx+1100h] ; AX=4C2Ah(6) mov ax,[bx+si] ; AX=7856h(7) mov ax,[bx][si+1100h] ; AX=65B7h2.2指出下列指令的错误(1) mov cx,dl 两操作数类型不匹配(2) mov ip,ax IP 指令指针禁止用户访问(3) mov es,1234h 立即数不允许传给段寄存器(4) mov es,ds 段寄存器之间不允许传送(5) mov al,300 两操作数类型不匹配(6) mov [sp],ax 目的操作数应为[ BP ](7) mov ax,bx+di 源操作数应为 [BX+DI](8) mov 20h,ah 立即数不能作目的操作数2.3已知数字0 ~ 9对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、11H、12H、14H,它存在于以table为首地址(设为200H)的连续区域中。
第三章 汇编语言程序设计
第3章 汇编语言程序设计 章
3.2 汇编语言源程序的格式
பைடு நூலகம்
名字: 名字:变量和标号
变量名 段名 过程名:指示性语句中的名字.内存单元的名 变量名/段名 过程名:指示性语句中的名字. 段名/过程名
定义. BUF DB ? 字,由DB/DW/DD定义. 由 定义 变量的三种属性: 变量的三种属性: 段值 SEG 偏移量 OFFSET 类型 BYTE/WORD/DWORD 标号:指令性语句中的名字.指令存放单元的符号地址. 标号:指令性语句中的名字.指令存放单元的符号地址. LOOPER: MOV AL,DATA[SI] 标号的三种属性: 标号的三种属性: 段值 SEG 偏移量 OFFSET 类型 NEAR/FAR 对于汇编程序来说,变量和标号都是存储单元的符号地址. 注:对于汇编程序来说,变量和标号都是存储单元的符号地址. 只是标号对应的存储单元中存放的是指令, 只是标号对应的存储单元中存放的是指令,而变量所对应的 存储单元存放的是数据. 存储单元存放的是数据.
令和数据. 令和数据. 汇编语言(Assenbly Lauguage):用助记符来编写 汇编语言( Lauguage): 指令,地址和数据也可用符号表示. 指令,地址和数据也可用符号表示.用汇编语言 编写的程序必须翻译成机器语言目标程序( 编写的程序必须翻译成机器语言目标程序(或目 标代码)才能执行,这种翻译过程称为汇编 汇编. 标代码)才能执行,这种翻译过程称为汇编. 高级语言:不针对某个具体的计算机,通用性强. :不针对某个具体的计算机,通用性强. 但高级语言编写的源程序同样必须"翻译" 但高级语言编写的源程序同样必须"翻译"成机 器语言,计算机才能执行, 器语言,计算机才能执行,所用的系统软件称为 编译程序或解释程序. 编译程序或解释程序.
计算机接口技术课件 第三章 MCS-51单片机汇编语言与程序设计基础
例2:编制一段程序,要求在端口线 :编制一段程序,要求在端口线P1.0,P1.1上分别产生周期为 , 上分别产生周期为 200us和400us的方波.设单片机的外接频率为 的方波. 和 的方波 设单片机的外接频率为12MHz. . 分析:利用定时器产生方波,将定时器设置成为工作方式 , 分析:利用定时器产生方波,将定时器设置成为工作方式3,将寄 存器T0定时 定时100us,T1定时 定时200us,达到定时时间后引起中断,在中 存器 定时 , 定时 ,达到定时时间后引起中断, 断服务程序中各自将P1.0和P1.1引脚取反. 引脚取反. 断服务程序中各自将 和 引脚取反 定时器预设值的设置: 定时器预设值的设置: 单片机的晶体振荡频率为12MHz,计时器的计时频率为1MHz,机 单片机的晶体振荡频率为 ,计时器的计时频率为 , 器周期为1us. 定时 定时100us,因此寄存器 需要计数 需要计数100次 器周期为 . T0定时 ,因此寄存器T0需要计数 次 ,其预 置值为64H+1=9CH. T1定时 定时200us,因此寄存器 需要计数 需要计数200次 置值为 . 定时 ,因此寄存器T1需要计数 次 其预置值为C8H+1=38H. ,其预置值为 . 定时器T0,T1的工作方式设置: 的工作方式设置: 定时器 的工作方式设置 T0采用工作方式 ,因此 采用工作方式3,因此TMOD寄存器的值设置为 寄存器的值设置为#22H. 采用工作方式 寄存器的值设置为 . 定时器T0,T1的控制设置: 的控制设置: 定时器 的控制设置 打开T0, ;要求TCON寄存器的值设置为 寄存器的值设置为#50H. 打开 ,T1;要求 寄存器的值设置为 .
定义存储区域的大小. 6. DS —定义存储区域的大小. 定义存储区域的大小 例: ORG 0350H DS 3
汇编语言(微机)第三章
汇编语言源程序的格式
一般情况下,定位类型、组合类型和类别说明可以 不用。 注意:SEGMENT和ENDS语句必须成对使用。 例:定义一数据段DATA
DATA SEGMENT A DB '1234' B DW 12H
DATA ENDS
22
汇编语言源程序的格式
(2)偏移地址定位语句 ORG 格式:ORG 数值表达式 功能:指定在它之后的程序段或数据块所存放的起始地 址的偏移量。
SUB1: ?
RESU: ?
?
31
汇编语言源程序的格式
④ 用DUP重复因子初始化一个数据区
格式:N DUP (表达式)
?、数值、
数值表达式
重复次数 重复装入的内容
字符等
例1: DA1 DB 2 DUP(0) DA2 DB 2 DUP(‘AB’) DA3 DW 2 DUP(1)
DA1
00
00
DA2
41
LOP: ADD AL,[BX] ADC AH,0 INC BX LOOP LOP MOV [DI] ,AX MOV AH ,4CH INT 21H
CODE ENDS END START
9
汇编语言源程序的格式
汇编语言源程序的格式
二、指令性语句 [标号:] 操作码 [操作数] [;注释项]
操作码:指明操作的性质,说明计算机要执行的具体操 作。用助记符表示。
第三章:8086汇编语言程序设计
主讲教师:范新民
整理ppt
1
8086汇编语言程序设计
1 3.2.1 汇编语言源程序的格式 2 3.2.2 常量、标识符和表达式 3 3.2.3 指示性语句 4 3.2.4 指令性语句 5 3.2.5 宏指令
第3章 汇编语言程序设计
START PROC FAR MOV AX,DSEG MOV DS,AX MOV AX,ESEG MOV ES,AX ;-----------------------------------------------------微机原理 汇编语言程序设计(8)
MOV AH,4CH INT 21H 指令构成的管理性语句,其对 START ENDP 应的伪操作是在汇编过程中完 CSEG ENDS 成的,汇编后不产生机器代码。 ;--------------------------------------------
MESG
43 45 4C 4C
H E L L O
DB ‘AB’ DW ‘AB’
41
A
42 42 41
B B A
微机原理 汇编语言程序设计(31)
• 操作数?可以保留存储空间但 不存入数据. ABC DB 0,?,?,?,0 DFF DW ?,52,? • 经汇编后存储情况如图所示.
ABC
00
微机原理 汇编语言程序设计(15)
• 段定义伪操作SEGMENT/ENDS 格式如下: segment-name SEGMENT … segment-name ENDS 其中删节号部分,对于DS、ES和SS来说,一般是存贮 单元的定义、分配等伪操作;对于代码段则是指令 及伪操作。
微机原理 汇编语言程序设计(16)
汇编语言的语句格式
• 汇编语言源程序中的每个语句可以由4项组成, 格式如下 [名字项] 操作项 操作数项 ;注释项 AGAIN: MOV AL, [SI] ;取加数 A DB ‗ABCDEFG‘
微机原理 汇编语言程序设计(9)
名字项
• 源程序中用下列字符表示名字: • 字母:A~Z或a~z; • 数字:0~9; • 专用字符号:?、• 、@、―、$; • 名字项可以是标号或变量。
汇编语言程序设计第三章习题答案
第三章答案:3.1(1)立即数寻址代码段(2)寄存器寻址数据段(3)寄存器间址数据段(4)寄存器间址数据段(5)直接寻址数据段(6)直接寻址数据段(7)基址寻址堆栈段(8)直接寻址代码段(9)寄存器寻址数据段(10)变址寻址数据段(11)基址变址寻址数据段(12)基址变址寻址堆栈段(13)基址变址寻址堆栈段(14)基址变址寻址堆栈段3.2(1)直接寻址30000H+0ABCH=30ABCH(2)寄存器寻址(3)直接寻址30000H+2000H=32000H(4)基址寻址30000H+0100H+2000H=32100H(5)寄存器间址30000H+0100H=30100H(6)寄存器间址30000H+00A0H=300A0H(7)寄存器间址20000+0010H=20010H(8)基址变址寻址20000H+0010H+2000H+00A0H=220B0H (9)基址寻址30000H+0100H-40H=300C0H(10)变址寻址30000H+0040H+00A0H=300E0H(11)基址变址寻址30000H+0100H+0100H-0040H=301C0H (12)基址变址寻址20000H+00A0H+0100H+0010H=201B0H (13)变址寻址30000H+2000H+0002H=32002H(14)基址变址寻址41000H+2000H+0100H+0002H=43102H 3.3第一种:MOV AX,[02C0H]第二种:MOV AX,[BP]第三种:MOV AX,0240H[BX]第四种:MOV AX,0100H[DI]第五种:MOV AX,0220H[SI](只要物理地址为095C0H即可)3.4(1)错,类型不匹配(2)错,类型二义性(3)对(4)错,立即数不能直接送入段寄存器(5)错,字节单元无法存放PUSH的值(6)对(7)对(8)错,不能把数据从段寄存器传入段寄存器(9)错,源操作数与目的操作数不能同时为存储器操作数(10)错,操作数类型二义性(11)错,XCHG指令的两个操作数都不能为立即数(12)错,类型不匹配(13)错,操作数类型二义性(14)错,RCL移位不为1时,必须用CL寄存器来操作(15)错,不能传送入段寄存器CS(16)错,目的操作数不能为立即数(17)错,格式不正确(18)错,变址寄存器不能使用寄存器BP(19)错,基址寄存器不能使用寄存器SI(20)错,目的操作数必须为通用寄存器3.5(1)(CL)=0F6H(2)(1E4F6)=5678H(3)(BX)=0056H (AX)=1E40H(4)(SI)=00F6H (DS)=1E40H (1E4F6H)=0024H (5)(CX)=00F6H (AX)=5678H (09226H)=1234H 3.6MOV是数据传送指令,LEA是取地址指令。
