汇编语言第三章

合集下载

第三章 习题和思考题参考答案(汇编语言)

第三章 习题和思考题参考答案(汇编语言)

第三章习题和思考题(汇编语言)一.填空题1.在汇编语言中标号的类型有NEAR 和FAR,变量的类型有BYTE、WORD、DWORD 、QWORD、TBYTE。

2.在汇编语言中,一个过程的属性为NEAR,表明主程序和子程序在同4一代码段中;若为FAR,则表明主程序和子程序不在同一代码段中。

3.下列程序运行后,X单元的内容为140。

.MODEL SMALL.DATAX DW 10Y DW 20Z DW 100,40,66,80.CODE.STARTUPMOV BX, OFFSET ZMOV AX, [BX]MOV Y, AXMOV AX, [BX+2]ADD AX, YMOV X, AX.EXITEND4.以下程序执行后,(AX)=5501H。

……A DW 124H,345H,128H,255H,512H,127H,678H,789HB DW 5……MOV BX, OFFSET AMOV SI, BMOV AX, [BX+SI]二.选择题1.完成41H送[2100H],42H送[2101H]的正确程序段是B 、C。

A. MOV AL, 41HB. MOV SI, 2100HMOV [2100H], AL MOV [SI], ‘A’INC 41H INC SIMOV [2100H], AL MOV [SI], ‘B’C. MOV AX, 4241HD. MOV AX, ‘AB’MOV [2100H], AX MOV [2100H], AX2. 在汇编过程中不产生指令码,只用来指示汇编程序的指令是 C 。

A. 汇编指令B. 机器指令C. 伪指令D. 宏指令三.问答题1.什么是指令语句?什么是伪指令语句?它们的主要区别是什么?答:指令语句经过汇编后要产生机器码,而伪指令语句不产生机器码;指令语句和机器的一种操作相对应,而伪指令语句和机器的一种伪操作(汇编过程)相对应。

2. 试计算下列伪指令中各变量所分配的字节数A1 DW 20A2 DW 8DUP(?),10,20A3 DD 10DUP(?)A4 DB 3DUP(?,4DUP(0))A5 DB ‘Happy New Year!!’答:变量A1、A2、A3、A4、A5分配的字节数分别为2 、20、40、15、16 四.阅读程序1.请把下列程序中所缺语句补充完整,并回答问题:TITLE EXAMPLE.ASMDATA SEGMENTA DW 0B DW 0C DW 230, 20, 54(1) DATA ENDSCODE SEGMENTASSUME (2) CS:CODE DS:DATAPROG PROC FARSTART:MOV AX,DATA(3) MOV DS, AXMOV BX,OFFSET CMOV AX,[BX]MOV B,AXMOV AX,2[BX]ADD AX,BMOV A,AXEXIT: MOV AH, 4CHINT 21HCODE ENDS_(4) END START问题: 1.程序执行完后,A单元的内容是多少? 2502.在以ES:SOC1为起始地址的表中存有字符串,它以NULL(00H)作为串结束符。

汇编语言第三章答案

汇编语言第三章答案

3.1 给定(BX)=637DH,(SI)=2A9BH,位移量D=7237H,试确定在以下各种寻址方式下的有效地址是什么?(1) 立即寻址(2) 直接寻址(3) 使用BX的寄存器寻址(4) 使用BX的简接寻址(5) 使用BX的寄存器相对寻址(6) 基址变址寻址(7) 相对基址变址寻址答:(1) 操作数在指令中,即立即数;(2) EA=D=7237H;(3) 无EA,操作数为(BX)=637DH;(4) EA=(BX)=637DH;(5) EA=(BX)+D=0D5B4H;(6) EA=(BX)+(SI)=8E18H;(7) EA=(BX)+(SI)+D=1004FH;超过了段的边界,最高进位位丢失,因此EA=004FH。

3.2 试根据以下要求写出相应的汇编语言指令(1) 把BX寄存器和DX寄存器的内容相加,结果存入DX寄存器中。

(2) 用寄存器BX和SI的基址变址寻址方式把存储器中的一个字节与AL寄存器的内容相加,并把结果送到AL寄存器中。

(3) 用寄存器BX和位移量0B2H的寄存器相对寻址方式把存储器中的一个字和(CX)相加,并把结果送回存储器中。

(4) 用位移量为0524H的直接寻址方式把存储器中的一个字与数2A59H相加,并把结果送回存储单元中。

(5) 把数0B5H与(AL)相加,并把结果送回AL中。

答:(1) ADD DX, BX(2) ADD AL, [BX][SI](3) ADD [BX+0B2H], CX(4) ADD WORD PTR [0524H], 2A59H(5) ADD AL, 0B5H3.3 写出把首地址为BLOCK的字数组的第6个字送到DX寄存器的指令。

要求使用以下几种寻址方式:(1) 寄存器间接寻址(2) 寄存器相对寻址(3) 基址变址寻址答:(1) MOV BX, OFFSET BLOCKADD BX, (6–1)*2MOV DX, [BX](2) MOV BX, OFFSET BLOCK 改为:MOV BX, (6-1)*2MOV DX, [BX+(6–1)*2] 也可MOV DX, BLOCK[BX](3) MOV BX, OFFSET BLOCKMOV SI, (6–1)*2MOV DX, [BX][SI]3.4 现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100H)=12H,(20101H)=34H,(20102H)=56H,(20103H)=78H,(21200H)=2AH,(21201H)=4CH,(21202H)=B7H,(21203H)=65H,试说明下列各条指令执行完后AX寄存器的内容。

第三章 汇编语言程序设计

第三章  汇编语言程序设计

第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): 指令,地址和数据也可用符号表示. 指令,地址和数据也可用符号表示.用汇编语言 编写的程序必须翻译成机器语言目标程序( 编写的程序必须翻译成机器语言目标程序(或目 标代码)才能执行,这种翻译过程称为汇编 汇编. 标代码)才能执行,这种翻译过程称为汇编. 高级语言:不针对某个具体的计算机,通用性强. :不针对某个具体的计算机,通用性强. 但高级语言编写的源程序同样必须"翻译" 但高级语言编写的源程序同样必须"翻译"成机 器语言,计算机才能执行, 器语言,计算机才能执行,所用的系统软件称为 编译程序或解释程序. 编译程序或解释程序.

第三章 汇编语言程序及实现

第三章 汇编语言程序及实现

2013-8-13
河南师范大学计算机与信息技术学院
29
汇编语言程序设计——方法、技术、应用
2. 属性指定操作
格式:THIS 类型名 利用THIS说明的操作数具有汇编时的当前逻辑地址,但具有指 定的类型。 LABEL伪指令的功能等同于‚EQU THIS‛。
示例1
示例2
2013-8-13
河南师范大学计算机与信息技术学院
河南师范大学计算机与信息技术学院
25
汇编语言程序设计——方法、技术、应用
运算符的优先级
1 2 3 4 5 6 7 8 9 10 () <> [] · LENGTH SIZE WIDTH MASK PTR OFFSET SEG TPYE THIS : HIGE LOW * / MOD SHL SHR + EQ NE GT LT GE LE NOT AND 建议采用圆括号‚()‛ OR XOR 显式表达,它可以极大 SHORT 地提高程序的可阅读性。

2013-8-13
河南师范大学计算机与信息技术学院
13
汇编语言程序设计——方法、技术、应用
1.常量
常量表示一个固定的数值。不占存储空间。
常量在程序中可以直接出现,对于经常使用的常量可以定义为符号常量。 常量在伪指令语句中主要用于给变量赋初值,在指令语句中常用作立即 数及存储器寻址方式中的位移量。 数值常量可以是二、八、十、十六进制数。 字符常量是将字符用单引号或双引号界定; 字符串常量是将字符串用单引号或双引号引起,单引号字符本身用连 续两个单引号引起。 各种符号的属性值可作为常量使用,称为属性常量。
2013-8-13
河南师范大学计算机与信息技术学院
28
汇编语言程序设计——方法、技术、应用

汇编语言(微机)第三章

汇编语言(微机)第三章
21
汇编语言源程序的格式
一般情况下,定位类型、组合类型和类别说明可以 不用。 注意: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 宏指令

《汇编语言》第三章 课件05

《汇编语言》第三章 课件05


3.9 push、pop指令

push和pop指令的格式(2) push 段寄存器:将一个段寄存器中的 数据入栈 pop段寄存器:出栈,用一个段寄存器 接收出栈的数据 例如:push ds pop es

3.9 push、pop指令


push和pop指令的格式(3) push内存单元:将一个内存单元处的字入栈 (栈操作都是以字为单位) pop 内存单元:出栈,用一个内存字单元接 收出栈的数据 例如:push [0] pop [2]

实际情况:8086CPU中并没有这样的寄存器。
3.8 栈顶超界的问题

8086CPU不保证对栈的操作不会超界。 这就是说, 8086CPU 只知道栈顶在何 处(由SS:SP指示),而不知道读者安 排的栈空间有多大。这点就好像 ,CPU 只知道当前要执行的指令在何处(由 CS:SP指示)而不知道读者要执行的指 令有多少。 从这两点我们可以看出
pop 指令的执行过程

pop ax (1)将SS:SP指向的内存单元处的数 据送入ax中; (2)SP = SP+2,SS:SP指向当前栈顶 下面的单元,以当前栈顶下面的单元 为新的栈顶。
图示
pop 指令的执行过程

注意
pop 指令的执行过程

注意:
出栈后,SS:SP指向新的栈顶

3.8 栈顶超界的问题

8086CPU的工作机理,只考虑当前的情 况: 当前栈顶在何处; 当前要执行的指令是哪一条。
结论
3.8 栈顶超界的问题

结论:

我们在编程的时候要自己操心栈顶超 界的问题 ,要根据可能用到的最大栈 空间,来安排栈的大小,防止入栈的 数据太多而导致的超界; 执行出栈操作的时候也要注意,以防 栈空的时候继续出栈而导致的超界。

《汇编语言》第三章 课件01

《汇编语言》第三章 课件01

从哪个内存单元送到哪个寄存器中呢?
mov指令的格式: mov 寄存器名,内存单元地址 “[„]”表示一个内存单元, “[„]”中的0 表示内存单元的偏移地址。 那么内存单元的段地址是多少呢?



更多精彩资编程源请关注:
3.2 DS和[address]


执行指令时,8086CPU自动取DS中的数据为内 存单元的段地址。 如何用mov指令从10000H中读取数据? 10000H表示为1000:0(段地址:偏移地址) 将段地址1000H放入ds 用mov al,[0]完成传送(mov指令中的[]说 明操作对象是一个内存单元,[]中的0说明 这个内存单元的偏移地址是0,它的段地址 默认放在ds中) 如何把1000H送入ds?
内存中字的存储 DS和[address] 字的传送 mov、add、sub指令 数据段 栈 CPU提供的栈机制 栈顶超界的问题 push、pop指令 栈段
CPU 如何执行 指令的角度讲解了8086CPU的逻辑结构、 形成物理地址的方法、相关的寄存器以 及一些指令。 这一章中,我们从访问内存的角度继续 学习几个寄存器。
(一种合理的回
更多精彩资编程源请关注:
3.3 字的传送


因为8086CPU是16位结构,有16根数据线,所 以,可以一次性传送16位的数据,也就是一 次性传送一个字。 比如:
更多精彩资编程源请关注:
3.3 字的传送

问题3.3:内存中的情况如下图,写出下面 指令执行后寄存器ax,bx,cx中的值。
更多精彩资编程源请关注:
3.2 DS和[address]



CPU要读取一个内存单元的时候,必须先 给出这个内存单元的地址; 在8086PC中,内存地址由段地址和偏移 地址组成。 8086CPU中有一个 DS寄存器,通常用来 存放要访问的数据的段地址。

计算机组成原理与汇编语言3

计算机组成原理与汇编语言3
第三章 数值运算及运算器
补码加减运算
注意:求一个数的补码: 正数时,补码和原码相同; 负数时, 对原码除符号位外求反加1。
例1: 1: y = -0.0110 [y]补 = 1.1010 例2: y = 0.0111 [y]补 = 0.0111 [-y]补 = 1.1001 [-y]补 = 0.0110
第三章 数值运算及运算器
例(3):按位清
设:A=10010010,将A最高位清“0” 设:B=01111111 10010010 A ∧ 01111111 B ——————— 00010010 A
第三章 数值运算及运算器
例(4):按位测试
设:A=10010010,测A最高位是否为“1”; 设: B=10000000 10010010 ∧ 10000000 ——————— 10000000 结果不全为“0”,表明被测码的被测位为“1”。 结果为全“0”,表明被测码的被测位为“0”。
第三章 数值运算及运算器
(一)对进位公式的分析 设相加的两个n位操作数为: A=An-1An-2…Ai..A0 B=Bn-1Bn-2…Bi..B0
Ci+1 = AiBi + (Ai⊕Bi) Ci —— 进位逻辑表达式 设:Gi = AiBi —— 进位产生函数(Carry Generate Function)
二、溢出检测
1. 采用一个符号位判断
规则: • 当两个同号数相加,若所得结果符号与两数符号不同, 则表明溢出。 • 设An、Bn分别表示两个操作数的符号; Sn表示结果 的符号, 则有: 溢出=AnBnSn + AnBnSn
63+66=129 0,0111111 + 0,1000010 1,0000001
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Chap3 Elements of Assembly Language 10
Exercises 3.1
For each combination of characters below, determine whether or not it is an allowable label (name). If not, give a reason (a) repeat (e) 2much
Chap3 Elements of Assembly Language 24
Run example Debug Windbg example.exe

Chap3 Elements of Assembly Language
25
3.4 汇编器清单文件(.lst)

ML汇编器在汇编过程中会产生一个清 单文件.lst,这个文件显示源代码、转 换的目标代码以及附近信息. 汇编时需 要二维复交转换器 /Fl, 生产清单文件 ml /c /coff / Fl /Zi example.asm
Edit Masm
6.11
Windbg
cmd
Chap3 Elements of Assembly Language 23
DOS prompt

Assemble
ml /c /coff /Zi example.asm /c 只编译不连接 /coff 生成COFF格式的目标文件 /Zi 告诉汇编器在输出时添加调试信息
是一条指令性语句,mov代表“move”, 但是该指令实际上是完成一个复制操作。 mov number1, eax 指令把寄存器中的数值复制到地址为 number1的内存双字中。

Add
将第二个数字加到第一个数字上。 add eax,number2
Chap3 Elements of Assembly Language 20
example.lst
Chap3 Elements of Assembly Language
26
3.5 常数操作数

数据的表示方式 BYTE directive WORD directive DWORD directive
Chap3 Elements of Assembly Language
(b) exit
(c) more
(f) add
(g) if
(d) EndIf
(h) add2
Chap3 Elements of Assembly Language
11
汇编语言的格式
[名字] 指令助记符 [操作数] [;注解]
2.指令助记符:表示不同操作的指令 3.操作数: 指令执行的对象。依指令的 要求,可能有一个、两个或者没有。 4.注解:该项可有可无,是为源程序所 加的注解,用于提高程序的可读性。 ZeroCount:mov eax,0 ;初始化数据 为0
是一个指示性语句。Proto用来产生一个函数, 函数名字是:ExitProcess,用于结束程序的系 统函数。它有一个参数Dword类型的。
Chap3 Elements of Assembly Language
16
Directives (2)

Include io.h
指示汇编器拷贝一文件io.h到程序中
3
3.1 汇编语言


一个汇编语言的源代码文件包含了一 系列语句。
语句要求每行少于80个字符。(MASM6.1
还允许不长于512个字符的句子,在每行的行尾用 斜杠“\”将一条语句拆分成多行)。
注释语句,开头用“;”。 Mov eax,0 ;初始化数据为0 不区分大小写

Chap3 Elements of Assembly Language
Chap3 Elements of Assembly Language
12
3.2一个完整的实例

从键盘输入两个数据,得到两个数据 的和,显示出来。
Chap3 Elements of Assembly Language
13
C program
#include <stdio.h> main() { long a,b,c; printf("Enter first number: "); scanf("%ld",&a); printf("\nEnter second number: "); scanf("%ld",&b); c=a+b; printf("\n\nThe sum is %ld \n",c); }
27
数据的表示方式
Suffix
H B O or Q none
Base
16 2 8 10
Number System
hexadecimal binary octal decimal
Chap3 Elements of Assembly Language
28
Example of the use of suffixes
将双字整数转换为ASCII码
Chap3 Elements of Assembly Language 21
3.3程序的汇编、链接和运行
汇编语言的过程
Object file (Machine code, .obj) List file (Text file, .lst)
Linker (link)
Assembler Source file (masm) (Text file .asm)

Chap3 Elements of Assembly Language 6
指示性语言(directive)
一条指示性语句告诉汇编器做某种操 作。这种操作并不会产生机器指令, 也不会对目标代码有任何影响。 .code

. 386
.nolist Include io.h
Chap3 Elements of Assembly Language
; valueis FF ; valueis A5
Chap3 Elements of Assembly Language 15
Directives(1)

.386
指明指令集
.model flat
程序工作模式, flat为Windows程序使用的模式 (代码和数据使用同一个4GB段)
ExitProcess
proto near32 stdcall , dwExitCode:dword
29
BYTE directive
一条Byte指示性语句为数据与预留了 一个或多个字节的存储空间。如果数 据是数字的,那么可以被看作为有符 号数据或者无符号数。 无符号数据的表示范围0 to 255 有符号数据的表示 –128 to 127

Chap3 Elements of Assembly Language

Link
link /debug /subsystem:console /entry:start /out:example.exe example.obj io.obj kernel32.lib /subsystem:console 连接器的参数,用来指定程序 的入口函数,console是win32 字符模式应用程序
汇编语言的要素
上章回顾

Hardware
Memory & memory address CPU registers
Chap3 Elements of Assembly Language
2
本章内容
汇编语言
程序的汇编、链接和运行
指令中的操作数
I/O.H中宏的输入/输出
Chap3 Elements of Assembly Language
Executable file (Machine code, .exe)
Debuger (windbg)
Text editor (edit)
Chap3 Elements of Assembly Language
22
需要的软件
Text
Editors Assembler Linker Debuger
7
宏(macro)

一个宏语句是一系列语句的缩写,它 们可以是指令性语句、指示性语句或 者宏。
Chap3 Elements of Assembly Language
8
汇编语言的格式

由汇编语言编写的源程序是由许多语句(也 可称为汇编指令)组成的。每个语句由1~4 个部分组成,其格式是: [名字] 指令助记符 [操作数] [;注解]
1.
名字:给指令或某一存储单元地址所起的名字。可由下列 字符组成: 字母:A ~ z ; 数字:0 ~ 9 ; 特殊字符:?、· 、@、 __、$ 。 数字不能作标识符的第一个字符,而圆点不能用作第一个 字符。标识符最长为247个字符。
9
名字域的用处之一是在程序汇编和链 接后,代表指令在内存中的地址。其 他的指令就可以很容易地找到这个被 标识的指令,如果一条加法指令需要 在程序中循环执行,那么就可以这样 写: addloop: add eax,158 Jmp addloop Jmp是跳转指令。
30
Example of byte
byte1 BYTE 255 ; valueis FF
byte2 BYTE 127 ; valueis 7F byte3 BYTE 91 ; valueis 5B
byte4 BYTE 0
byte5 BYTE -1 byte6 BYTE -91
; valueis 00
Macros

Output
显示存储在prompt1地址中的字符串,使用空字 符串(00)字节来结束显示
相关文档
最新文档