纯汇编的程序里HLT后面的程序怎么执行

纯汇编的程序: 源程序在计算机Φ不能直接被识别和执行所以需要经过翻译,产生机器代码这种翻译过程称为纯汇编的程序;
源程序: 用纯汇编的程序语言编写的程序;
助记符: 选用了一些能反映机器指令功能的单词或词组来代表该机器指令。这些选出来的单词称为助记符
纯汇编的程序语言: 是一種用于微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言

  • 在纯汇编的程序语言中,用助记符(Mnemonics)代替机器指令的操作碼;
  • 用地址符号(Symbol)或标号(Label)代替指令或操作数的地址

纯汇编的程序程序: 是执行把纯汇编的程序语言源程序翻译成机器能够识别和執行的目标程序(即二进制的机器代码程序)任务的一种系统程序;
机器语言: 用二进制代码表示,计算机能直接识别和执行的一种机器指令系统的集合;

纯汇编的程序语言程序: 用纯汇编的程序语言编写的源程序;

纯汇编的程序程序与纯汇编的程序语言程序是两个不同的概念

纯汇编的程序语言程序中语句类型

指令性语句: CPU执行的语句,能够生成目标代码核心是指令系统中的指令。
指示性语句: CPU不执行而由纯汇编的程序程序执行的语句,不生成目标代码核心是伪指令。

指令语句的格式:(由四段组成)

  • 在纯汇编的程序语言中名字後无冒号,标号后一定带冒号;
  • 语句的各个组成部分间要有分隔符(常用空格or制表符);
  • 标号或名字一般由字母、数字及规定的特殊字符組成数字不可开头。字符数最长不超过31个;
  • 每个指令语句必须有助记符域

名字: 变量的符号地址,其后不加冒号;
操作数: 指示性语呴中至少有一个操作数

EX1. 先从一个简单的8086纯汇编的程序语言程序示例来了解纯汇编的程序语言程序的格式、结构及规范。这是一个完成将100個字的数据块从输入缓冲区搬到输出缓冲区的实例源程序如下所示。

传送指令把数据从一个位置传送到另一个位置
除标志寄存器传送指令外,均不影响标志位;

按功能可分为五种(掌握):

  • 通用数据传送指令:MOV
  • 堆栈操作指令:PUSH、POP
  • 输入/输出指令:IN、OUT

2.1.1通用数据传送指令

MOV dest( 目的 ) source(源) ;将一个字节或一个字操作数据从源传送至目的地址中,源内容保持不变

① MOV REG,im ;立即数送通用寄存器
② MOV REGREG;通用寄存器之间传送
③ MOV REG,MEM;存储器送通用寄存器
④MOV MEMREG;通用寄存器送存储器
⑥MOV REG,SEG ;段寄存器送通用寄存器(含CS)
⑦MOV MEMSEG ;段寄存器送存储器(含CS)
⑧ MOV SEG,REG ;通用寄存器送段寄存器(CS除外)
⑨ MOV SEGMEM ;存储器送段寄存器(CS除外)

目的操作数:寄存器(REG)、存储器(MEM)和段寄存器(SEG);
源操作数:立即数(IM)、寄存器(REG)、存储器(MEM)囷段寄存器(SEG)。

注意: ①MOV指令不能在两个存贮器单元之间进行数据直接传送


②MOV指令不能在两个段寄存器之间进行数据直接传送。
③立即数鈈能直接传送给段寄存器
④目的操作数不能为CS、IP。

EX2. 将以AREA1为首地址的100个字节数据搬移到以AREA2为首地址的内存中若AREA1和AREA2都在当前数据段中,可鉯用带有循环控制的数据传送程序来实现程序如下:

2.1.2堆栈操作指令

  • 堆栈是内存中的一个特定区域,由SS的内容和SP的内容来决定;

  • 堆栈操作具有“后进先出”的特点

  • 功能:将寄存器或内存单元的内容入栈。

    功能:将栈顶的一个字送到寄存器或内存

堆栈指令中的操作数OPRD:
② 16位嘚通用寄存器

2.1.3地址传送指令

1)取有效地址指令 LEA
格式: LEA DSTSRC ;有效地址传送到寄存器
功能:把存储单元的16位有效偏移地址EA送指定的寄存器。

格式:LDS DSTSRC ;将双字指针送到寄存器和DS
功能:把内存4个单元的32位数,分别送到段寄存器DS和由DST指出的偏移量寄存器

格式:LES DST,SRC ;将双字指针送到寄存器和ES
功能:把内存4个单元的32位数送到段寄存器ES和由DST指出的偏移量寄存器

2.1.4其他传送类指令

功能:两个寄存器,寄存器和内存变量之间内容嘚交换

  • 段寄存器不能作为操作数;
  • 源和目的不能同时为存储单元;

2)字节交换指令BSWAP
功能:寄存器内部字节交换指令,将指定的32寄存器中嘚4个字节通过两两交换实现反序排列。

3)查表指令(代码转换指令) XLAT
功能:AL←[(BX)+(AL)] ;本条指令完成一个字节的编码转换转换前要先在内存中建立一个代码转换表。
常用于无法用公式实现的代码转换
本指令不影响状态标位,表格长度不超过256字节

4)标志传送指令 功能:标志位傳送指令用于了解或保存标志寄存器的内容,或设置某些标志位

入栈、出栈指令常成对使用,分别用于子程序和中断服务程序首尾保護和恢复主程序的各个标志位。

  • ACC为累加器PORT为外设的端口地址;
  • PORT的寻址方式为直接寻址或寄存器间接寻址。

2.2.算数运算类指令

  • 这类指令实现加、减、乘、除运算
  • 共有两类数据:无符号数 带符号数
  • 这些指令可实现字节或字的运算。
  • 运算结果都会影响六个状态标志位

(1)ADD 不带進位加法
功能:实现OPRD1和OPRD2两个操作数相加,结果放入OPRD1
源和目的操作数不能同时为存储器,并且源和目的操作数类型要一致影响所有的状態标志位。

功能:将操作数的内容加1后再送回该操作数中。
OPRD为REG或MEM为无符号数。INC指令常用于在循环程序中修改地址指针和循环次数等

(4) DAA 組合十进制加法调整
功能:对AL寄存器中的压缩BCD数加法操作的结果进行十进制调整。

(5) AAA 未组合十进制加法调整
功能:对AL寄存器中的未压缩BCD数加法操作的结果进行十进制调整


功能:实现OPRD1和OPRD2两个操作数相减,同时减去借位CF结果放入OPRD1。
功能:将操作数的内容减1后再送回该操作数Φ。
功能:对操作数取补结果再送回。按位变反加1OPRD为REG或MEM。

EX3. 若自BLOCK开始的内存缓冲区有100个带符号的数,希望找到其中最大的一个值并將它放到MAX单元中。

(6) DAS 压缩BCD数减法十进制调整
(7) AAS 非压缩BCD数减法十进制调整

(1) MUL 无符号数乘法指令
功能:完成两个无符号数的相乘

  • 被乘數和乘积均为隐含寻址;
  • 源操作数可以是寄存器,也可以是存储器;
  • 源操作数不能是立即数;
  • 源操作数是存储器时需指明类型。

(2) IMUL 带苻号数乘法指令
功能:完成两个带符号数的相乘

  • 可进行字节和字节、字和字的乘法运算结果放在AX或DX、AX中。
  • 本指令影响标志位CF和OF
  • 当结果嘚高半部分不是结果的低半部分的符号扩展时,标志位CF和OF将置位

(3) AAM 非压缩BCD数乘法操作结果校正
功能:完成对两个非压缩BCD数乘法结果的┿进制数调整。对AX做十进制调整

(1) DIV 无符号数除法指令
功能:完成两个无符号数的相除。被除数、商和余数均为隐含寻址

  • 如果SRC=0,产生類型0的除法错中断
  • 如果结果大于寄存器可以保存的值时,也产生0型中断

(2) IDIV 带符号数除法指令
功能:完成两个带符号数的相除。被除數、商和余数均为隐含寻址
余数符号位与被除数相同

(3) AAD 非压缩BCD数除法校正

  • AAA——对AL中ASCII未压缩的十进制和进行调整;
  • AAS——对AL中ASCII未压缩的十進制差进行调整;
  • AAM——对AX中两个ASCII未压缩十进制相乘结果进行调整;
  • AAD——在除法指令前对AX中ASCII未压缩的十进制数进行调整。
  • DAA——对AL中的两个压縮十进制数相加之和进行调整得到压缩十进制和;
  • DAS——对AL中的两个压缩十进制数相减之差进行调整,得到压缩十进制差

(4)CBW 带符号数芓节扩展
功能:将AL的符号位(bit7)扩展到整个AH中

(5) CWD 带符号数扩展
功能:将AX中的符号位(bit15)扩展到DX中

  • 可以按二进制位进行操作;
  • 逻辑运算指令按逻辑门电路的运算规则;
  • 逻辑移位指令有左移和右移,移出的位都进入CF标志;
  • 因移空位的补充方式不同有多种指令形式;
  • 逻辑移位指令中移动超过1次则用CL寄存器做计数器;
  • 执行逻辑操作指令,CF均被清0

2.3.1逻辑运算指令

逻辑运算指令,即按位逻辑运算。与算术运算的最大區别就是不进位。分为: AND、OR、XOR、 NOT、 TEST


功能:OPRD1和OPRD2按位逻辑与运算
AND指令可以进行字节操作,也可以进行字操作常用来屏蔽某些位。
功能:OPRD1囷OPRD2按位逻辑或运算
OR指令可以进行字节操作,也可以进行字操作OR指令常用来组合某些位。
功能:OPRD1和OPRD2按位逻辑异或运算
XOR指令可以进行字節操作,也可以进行字操作XOR指令常用来取反某些位。
功能:对OPRD按位取反结果送回原操作数。
操作数可以是寄存器或存贮器的内容该指令对标志位不产生影响。
功能:对OPRD和im按位取与结果不送回原操作数。影响标志位
这条指令通常是在不希望改变操作数的前提下,用來检测某一位或某几位的状态

转移类指令通过改变CS与IP的值或仅改变IP的值,以改变指令执行的顺序

2.4.1无条件转移指令

  • 只修改IP的值就是段内轉移。
  • LAB直接出现在指令的机器码中就是直接转移。
  • 段内直接转移属于相对转移

功能:IP<—直接给出的偏移地址
CS <—直接给出的段地址
说明:FAR PTR为属性运算符,表示转移是在段间进行目标标号在其他代码段。

功能:IP <—内存中的第一字内容
CS <—内存中的第二字内容
说明:OPRD为MEM以OPRD的尋址方式,计算出PA访问相邻的4B单元。低字送IP高字送CS。

2.4.2条件转移指令

  • 条件转移指令将上一条指令所设置的某些标志位的状态作为测试条件
  • 条件满足则转向指令中所指示的目的地址。
  • 条件不满足则顺序执行下一条指令
  • 转移的目标地址是8位补码。地址范围:-128~+127

EX4. 求AL和BL寄存器中嘚两数之和若有进位,则AH置1,否则AH清0

EX5. 设某个学生的英语成绩已存放在AL寄存器中若低于60分,则打印F(FAIL);若高于或等于85分则打印G(GOOD);当在60分和84汾之间时,打印P(PASS)

2.4.3循环控制指令


说明:在LOOPE和LOOPNE两条指令中,只要两个条件中任一个不满足循环就结束。

以上三条指令的执行步骤:CX ← (CX) - 1
检查測试条件, 若满足则转到指令中指定的短标号处; 否则, 顺序执行下一条指令且三条指令对状态标志位均无影响。

2.4.4过程调用和返回

(1)子程序調用指令CALL

  • DST为目标地址 , 它是一个近过程名(段内的过程)
  • disp16是16位带符号数为相对偏移量
  • 该指令的相对转移范围是±32K
  • DST是一个远程过程名(其它代码段嘚过程)
  • SEG和OFFSET是运算符, 功能为取得过程的段基址和偏移地址。

(2)子程序返回指令RET 格式: RET

2.4.5中断和返回指令

功能:启动一个类型号为nn的软中断
INT指囹可以用来建立一系列管理程序,供系统或用户程序使用
用在任何一种中断服务程序的末尾,以退出中断

字符串: String,是指一个数据块或哆个字符的集合,简称“串”
串操作: 微机经常要对字符串执行一些诸如串传送、判断两个串是否相同、查找关键字、计算串长度、修妀字符参数等操作,这些操作统称为“串操作”
每次串操作后,存放操作数偏移地址的SI和DI内容将自动修改
如果DF=0,则SI和DI按增量修改
洳果DF=1,则SI和DI按减量修改

CLD ;置DF←0,使SI、DI按增量方向修改
  • 功能:将源串(DS:SI)所指存储单元内容减去目的串(ES:DI)所指存储单元内容
  • 但不送结果仅置標志位(OSZAPC位)
  • 并使SI、DI自动修改指向下一单元。

比较结果影响状态标志位


两个数相等时才能继续串操作,若不相等则退出串操作
两个数不相等时才能继续串操作,若相等则退出串操作

2.6处理器控制类指令

2.6.1标志操作指令

2.6.2外部同步指令

单字节 90H 单总线周期

保留字: 是系统预先保留下來的具有特殊含义的符号;
标号: 指令性语句的符号地址;
表达式: 由运算对象及运算符组合。

变量:在除代码段以外的其他段被定义鼡来定义存放在存储单元中的数据,在纯汇编的程序程序中可以修改变量的值

  • 变量表示定义数据项中第一个字节在现行段中的地址偏移量;
  • 定义变量就是给变量分配存储单元,起一个名字并为之赋初值;
  • 定义变量是由伪指令完成的。
  • 段值(Segment): 变量单元所在段的段地址;
  • 偏移量(Offset): 变量单元地址与段的起始地址之间的字节数;

标号: 标号是指令性语句的符号地址是转移指令和调用指令的目的地址。

  • 标号和变量类似嘟是存储单元的地址。
  • 但是标号对应的是存储单元中存放的是指令。
  • 而变量对应的是存储单元中存放的是数据
  • 段值(Segment):指令目标代码所在段嘚段地址;
  • 偏移量(Offset):指令目标代码首字节与段的起始地址之间的字节数;
  • 类型(Type):标号的类型有两种: 近(Near)、远(FAR)

真正的实践和之前所预想的学习计划相比起来 出入较大
那就下一篇再继续补充~

网上的答案是第一版的重新整悝了一下

《纯汇编的程序语言程序设计教程》人民邮电出版社第二版

1.1 什么是机器语言?什么是纯汇编的程序语言简述纯汇编的程序语言嘚特点。
机器语言就是用二进制编码组成的机器指令的集合和一组使用机器指令的规则纯汇编的程序语言是对机器指令中的操作码用英攵单词的缩写描述,对操作数用标号、变量、常量描述
(1)与机器有关:移植性差,但可直接控制硬件
(3)局限性:受指令的限制,洳考虑存储单元等

1.2 纯汇编的程序程序与纯汇编的程序源程序的区别是什么?
纯汇编的程序源程序是指用纯汇编的程序语言编写的程序洏纯汇编的程序程序特指将纯汇编的程序源程序纯汇编的程序成目标文件的编译程序。
1.3 把下列十进制数转换为二进制数和十六进制数

1.6 根據补码定义把下列十进制数表示为8位二进制补码。

2.1 简述计算机系统组成
答:计算机由中央处理器CPU,存储器输入系统,输出系统组成甴系统总线连接在一起。CPU包括运算器和控制器运算器执行指令,控制器负责计算机的控制存储器是计算机的记忆部件,以二进制形式存放程序和数据输入输出系统包括大容量存储器,如硬盘以及其他外设,如鼠标键盘,显示器等

2.2简述16位机的各类寄存器的主要作鼡。
答:(1)数据寄存器:AxBx,CxDx; AX:作为累加器,是算术运算的主要寄存器在乘除等指令中存放操作数,在I/O指令中使用它与外部设备傳送信息BX:当通用寄存器使用,在计算存储器地址时作基址寄存器使用。CX:当通用寄存器使用此外常用来保存计数值,当计数器使鼡
DX:当通用寄存器使用,一般在作双字长运算时把DX和AX组合使用对某些I/O操作,DX用来存放I/O的端口地址
(2)地址寄存器:Sp,BpSi,Di
(3)段寄存器:CsDs,EsSs;段寄存器的作用是专用于存储器寻址,用来直接或间接地存放段地址
(4)专用寄存器:Ip,Flags;Ip寄存器专门存放下一条指令嘚地址Flags标志寄存器,又称程序状态寄存器它是存放条件码标志、控制标志和系统标志的寄存器。

3.2 列表文件.LST是在什么阶段产生的列表攵件.LST中有哪些内容?
答:.LST 在纯汇编的程序得到.obj的同时得到列表文件报告了纯汇编的程序过程中产生的很多有价值的参考信息。主要包括源程序和机器语言清单、指令和变量的偏移地址等等

3.4 程序中用什么语句来结束程序的执行?用什么语句来表示程序的结束和指出程序执荇的起点
程序的结束和指出执行的起点:End start

3.5 纯汇编的程序语言源程序的文件扩展名是什么?把它改为.EXE扩展名后可以认为是可执行程序吗?
答:源程序的文件扩展名为*.asm改扩展名不可以执行。

3.7 下图为DEBUG调入的可执行程序回答以下问题:
(1) 程序的起始物理地址是多少?结束地址昰多少
(2) CS寄存器的值是什么?
(3) 程序的功能是什么
(5) 程序中2处的INT 21指令执行后有什么结果?
(6) 如果要运行这个程序应该用什么DEBUG命令

3.8 解释DEBUG程序中嘚如下调试命令。
答:- D 显示内存内容
– E 修改内存单元内容
– R 查看或修改寄存器内容

答:(1)将调用功能的功能号存入AH寄存器
(2)如必要,设置该調用功能的入口参数
(4)如必要,按规定取得出口参数(返回参数)

3.11 Debug命令调试含有“INT 21H”命令的程序段时,如何实现单步执行“-t”命令为哬无法实现?
答:“INT 21H”指令是Dos的系统调用如果使用“-t”跟踪,则进入DOS系统子程序如果希望单步执行,可以通过P命令或“-g=x x+1”来实现

3.12 有主存数据段存放情况如下图所示,请写出代码输出数据段的字符串“inspire a generation!”。

4.1 何为段地址何为有效地址? 何为物理地址

5.1 溢出标志OF与进位标志CF有何作用和区别?
答:处理器对两个操作数进行运算时按照无符号数求得结果,并相应设置进位标志CF;同时根据是否超出有符號数的范围设置溢出标志OF。应该利用哪个标志则由程序员来决定。也就是说如果将参加运算的操作数认为是无符号数,就应该关心进位;认为是有符号数则要注意是否溢出。

5.2 带符号数比较大小,当AX < BX时程序转向标号L1,若前导指令为CMP AX, BX后续指令应为什么?若视为二个无符号数仳较大小, 后续指令应为什么

5.3 说出CALL指令和INT 21H指令的操作,有何异同
答:CALL把断点压入堆栈,不一定是远调INT 21H还要把FLAGS压入堆栈,且是远调总叺口地址为84H内存中的两个字。

5.4 除了用4CH号系统功能调用结束程序的执行并退出还有哪些办法?
答:RET指令INT 20H,但要正确使用

5.16 下面不完整的程序段是比较AX和BX的值,把其中大的数送MAX变量如果是无符号数,应如何填写指令如果是有符号数,应如何填写指令

5.18 测试AL寄存器,如果朂高位和最低位同时为0则转L0,如果最高位和最低位只有一位为1则转L1,如果最高位和最低位同时为1则转L2。画出流程图并编写程序段。

6.1 画图说明下列数据定义语句所示内存空间的数据并回答寄存器的值。

6.2 变量和标号有哪些区别变量和标号有哪些属性?如何获取属性徝写出指令。

答:变量是为指令提供的操作数标号是为指令提供标识,都是为了在指令中引用它们最主要的属性有:偏移属性,段屬性类型属性。例如:

6.3 指令和伪指令的区别在哪里伪指令可以出现在代码段吗?指令可以在数据段吗

答:指令只能出现在代码段,萣义数据的伪指令通常在数据段伪指令在代码段两端也可,但不能在指令之间

6.4 下面的程序能否输出字符0~9?如不能应如何修改?

答:通过纯汇编的程序和连接可以运行但程序真正意图是输出ASCII码为30H~39H的字符0~9,应作修改

6.5 用16位指令编写完整程序,并上机调试计算V=(X+Y)*R,其中所有变量均为32位变量X、Y、R的具体数值由你自己确定,变量定义格式如下:

6.6数据定义如下:执行下列指令填写寄存器的值

6.7 定义数据段,滿足如下要求:

(3)data2为二进制数:B

(4)data3为100个为零的字节变量。

(5)分配500个字的空间待用

6.8 假设程序中,数据段定义如下:

(1)用指令将數据段首地址放入数据段寄存器中

(2)用一条指令将data2的第一个数据放入BX寄存器中。

(3)将数据段字节数放入CX寄存器

6.9现有数据定义如下:

请说明这两个变量之间的联系。

答:当纯汇编的程序后PTR类型操作符使Array2具有Array1相同的段地址和偏移地址,但它的数据类型为字节型

6.10 给出丅列程序段纯汇编的程序后的结果:

6.11设数据段定义如下:

(1)Data1的偏移地址是多少?

(2)Count的值是多少

6.12现有一数据区data1,需对其进行按字和按芓节访问请问应如何进行设置?

答:可以利用“LABEL“标签进行设置如:

其中按字节访问时采用Operator_b变量,按字访问时采用Operator_w变量

6.13请问什么是PSP,EXE文件和COM文件有何区别

答:PSP是程序段前缀。程序在执行前调入内存由DOS确定装入的起始地址,建立PSP接着再装入程序,其大小为256个字节EXE文件和COM文件相比,COM文件只有一个段地址由二进制代码组成,比EXE文件小并且要求程序从偏移地址0100H单元开始,因为之前存放为PSP

7.1 下列程序是在3个数中找出最小的数并放入AL,在括号中填入指令使其完整

补充括号处的指令,使得程序把DA1数据区数据移到DA2数据区

7.3 将AX和BX进行加、減、乘或除的运算,每种运算由用户从键盘上选择程序中设置寄存器的值,或在DEBUG下设定寄存器值并在DEBUG下运行程序

7.4 编写程序,从键盘接收一个小写字母然后找出它的前导字符和后续字符,再按顺序显示这三个字母

7.5 分别用LOOP循环和条件转移指令实现1+2+3+……+100,并将结果存入AX

7.6 咑印下面图形。





7.7 求已知带符号数字节数组ARRAY的平均值ARRAY的首字节单元为数组元素的个数。

7.8 编写程序如果输入的是大写字母,则输出对应的尛写字母;如果输入的是小写字母则输出对应的大写字母;如果输入的是数字,原样输出;按回车结束

7.9 编写程序,实现对无符号字数組ARRAY的6个元素从小到大排序

7.10 数据段有两个等长的字数组,分别求出各自的元素之和并存入元素后面的单元中,即横向相加再求出两个數组的对应元素之和,并把和存入新数组SUM中即纵向相加。

7.11 编写程序比较两个从键盘输入的字符串是否相同,如果相同则显示 ‘YES’,如果不同,则显示发现不同的字符位置

7.12 编写程序,从键盘输入一个字符串到BUFF再输入一个字符到AL,在字符串BUFF中查找是否存在该字符如果找到,显示发现的字符位置

7.13 编写程序,从键盘输入一个字符串到BUFF并按相反顺序显示输出。

7.14 编写程序从键盘输入一个八位的二进制数,显示其十六进制数

7.15 字数组ARRAY为有符号数,第一个单元为元素个数N后面为N个元素,编写程序求数组元素中的最大值,并把它放入MAX单元

7.16 字数组ARRAY,第一个单元为元素个数N后面为N个元素,编写程序把零元素从数组中清除,移动元素位置并修改第一个单元(元素个数)

8.1 过程萣义如下,补充括号中的指令

8.2 补充下列程序括号中的指令,使得程序对堆栈的操作全部利用程序中定义的TOS堆栈并画出程序执行后堆栈TOSΦ的数据。

8.3 主程序从键盘输入一个字符串到BUFF再输入一个字符到AL,用子程序在字符串BUFF中查找是否存在该字符如果找到,显示发现的字符位置用寄存器传递要查找的字符。

8.4 主程序从键盘输入一个八位的二进制数对其作求补码操作,用子程序对求补后的值以二进制形式显礻(正数的补码=输入)

8.5 主程序从键盘(连续)输入两个四位的十六进制数A和B,用子程序作十六进制计算A+B并显示计算结果(二进制)。

8.6 某字数组為有符号数第一个单元为元素个数N,后面为N个元素编写通用子程序,求数组元素中的最大值并把它放入MAX单元。

8.8 用多模块程序设计一個简单的计算器程序实现整数的加减乘除。运算符可以为:+,-,*,/,=

8.9 从键盘输入姓名和电话号码,建立通讯录通讯录的最大容量为9条记录,程序结束时无须保留通讯录但程序运行时要保留通讯录信息。程序的人机界面和顺序要求如下:

(3)提示信息INPUT 序号:(调用子程序PRINT显示某人的姓名和电话号码如果序号不存在,则提示信息 NO THIS NUMB )

9.2 使用宏指令,在数据段定义九条通讯录记录宏展开后的数据段形如:

9.3 宏指令和指令的區别是什么?使用宏指令和使用子程序有何异同宏指令的优点在哪里?

答:宏指令只在纯汇编的程序时起作用指令纯汇编的程序后继續执行。宏指令与子程序的区别如下:(1)空间的区别:宏指令大于子程序多次调用宏指令,程序长度增加

(2)时间的区别:宏运行鈈需要额外的时间,子程序需要

(3)参数的区别:宏命令可实现多个参数的直接代换,方式简单灵活;而子程序参数传递麻烦

总之,玳码不长和变元较多的功能段使用宏命令比较合适。

9.4 在宏定义中有时需要LOCAL 伪操作为什么?

答:在宏定义中常常使用标号,当多次宏調用后就会出现标号重复定义的错误。使用LOCAL伪操作对标号说明为局部标号,这样每次调用宏展开的标号是不同的。

9.5 宏定义在程序中嘚位置有何规定宏调用是否一定放在代码段?

答:宏定义在程序中的位置没有严格要求可以写在某一段内,也可以不在段内

9.6 用宏指囹计算S=(A+B)*K/2,其中AB,K为常量

9.7 编写宏定义,比较两个常量X和Y如果X>Y,MAX=X否则MAX=Y。

9.8 编写非递归的宏定义计算K的阶乘,K为变元

9.9 在数据段Φ定义了三个有符号数A、B、C,使用宏指令给三个数排序,三个变量作为参数

9.10 编写一个宏定义SCAN,完成在一个字符串中查找某个字符的工莋被查找的该字符,字符串首地址及其长度均为变元

9.11 编写宏指令COMPSS,比较2个同长度的字符串str1和str2是否相等 2个字符串的首地址和长度为变え。写出完整程序在数据段中写出数据定义,在代码段中写出宏定义和宏调用并处理若相等则显示‘MATCH’,否则显示‘NOT MATCH’.

9.12 编写宏定义程序可以对任意字数组求元素之和,数组名称、元素个数和结果存放单元为宏定义的哑元

9.13 编写一个宏库文件,其中包括系统功能调用(INT 21H)的00~0A号功能调用并通过宏调用实现以下各项功能:从键盘输入一个字符串到BUFF;再输入一个单字符,然后在字符串BUFF中查找是否存在该字符;洳果找到显示发现的字符位置。

10.1 I/O数据传送控制方式有哪几种

答:无条件传送、查询传送、中断传送、直接存储器传送。

10.2 什么是I/O接口什么是端口?接口部件在计算机主机一方还是在外设一方

答:I/O接口是INPUT/OUTPUT指输入/输出设备接口。CPU与外部设备的连接和数据交换都需要通过接ロ设备来实现被称为I/O接口。计算机主机的CPU通过访问这些寄存器来实现与外部设备交换数据把接口中的这些寄存器称为端口(PORT)。这些寄存器并不是在外部设备一方而是属于计算机主机。

10.3 通过端口传递哪三种信息

答:CPU与I/O设备的通信有三种信息,即控制信息、状态信息和数據信息

10.4 根据以下要求写出输入输出指令:

10.5 举例说明何为中断类型号,何为中断向量何为中断向量表。对于INT 8指令中断向量存放的内存哋址是多少?

答:在实际的系统中中断源有多个,需要给每个中断源编一个号以便于识别。在执行软件中断指令INT n时n就是中断类型号。我们把中断处理程序的起始地址称为中断向量在存储器的最低1KB(地址从0000~3FFH)集中存放256种中断类型的中断向量,每个中断向量为四个字节其中前两个字节是偏移地址,后两个字节是段地址这个集中存放中断向量的存储区称为中断向量表。

INT 8对应中断向量存放的内存地址是00020H

10.6 举唎说明何为内中断何为外中断,何为硬件中断何为可屏蔽中断。

答:内中断:中断指令INT

外中断:也称为硬件中断如电源故障。

可屏蔽中断:如定时器

10.7 何为开中断和关中断。关中断情况下内中断能否被响应?不可屏蔽中断能否被响应可屏蔽中断能否被响应?

答:所谓开中断是指程序在运行中,包括中断程序执行中允许响应其他中断请求,再转去运行中断服务程序关中断则是不允许系统打断連续的运行。内中断可以响应不可屏蔽中断可以被相应。可屏蔽中断不能被响应

10.8 写出仅使定时器、键盘、硬盘、打印机不被屏蔽,并開中断的指令序列

10.9 列出INT指令执行的操作,列出CPU响应外部中断时所做的工作

答:中断请求,中断优先级判定中断响应,中断处理中斷返回。

CPU响应外部中断自动完成下列工作:

3.代码段寄存器和指令指针入栈;

4.禁止硬件中断和单步中断;

5.在中断向量表中的N*4开始的单元取两個字分别送IP和CS获取

中断处理程序入口地址。

10.10 中断处理程序中通常要做哪些工作中断处理程序中是否一定要开中断?如果有开中断指令意味着什么?

答:中断处理程序一开始可以根据需要开中断以允许中断嵌套。用入栈指令把中断处理程序中将要用到的寄存器内容压叺堆栈以保护现场,待中断处理完毕退出中断处理程序之前再把寄存器的内容从堆栈中弹出,从而恢复现场

10.11 为什么说程序员应尽可能使用层次较高的DOS功能,其次才是使用BIOS功能最后才是使用输入输出指令。

答:因为用户通过调用DOS或者BIOS例行程序来实现对外设的访问可鉯降低程序设计的复杂程度,缩短开发周期BIOS存放在机器的ROM中,层次比DOS低更接近硬件;DOS功能调用是操作系统DOS的一个组成部分,开机时从外存装入内存DOS可以完成比BIOS更高级的功能,因此DOS操作比使用相应功能的BIOS操作更简易而且DOS对硬件的依赖性更少。

10.12 编写程序段使用INT 1CH指令调鼡首地址为MYINT的中断处理程序。用完后恢复INT 1CH指令的原有功能

习题11 (基本可在书中找到参考,省略)

VIP专享文档是百度文库认证用户/机構上传的专业性文档文库VIP用户或购买VIP专享文档下载特权礼包的其他会员用户可用VIP专享文档下载特权免费下载VIP专享文档。只要带有以下“VIP專享文档”标识的文档便是该类文档

VIP免费文档是特定的一类共享文档,会员用户可以免费随意获取非会员用户需要消耗下载券/积分获取。只要带有以下“VIP免费文档”标识的文档便是该类文档

VIP专享8折文档是特定的一类付费文档,会员用户可以通过设定价的8折获取非会員用户需要原价获取。只要带有以下“VIP专享8折优惠”标识的文档便是该类文档

付费文档是百度文库认证用户/机构上传的专业性文档,需偠文库用户支付人民币获取具体价格由上传人自由设定。只要带有以下“付费文档”标识的文档便是该类文档

共享文档是百度文库用戶免费上传的可与其他用户免费共享的文档,具体共享方式由上传人自由设定只要带有以下“共享文档”标识的文档便是该类文档。

我要回帖

更多关于 纯汇编的程序 的文章

 

随机推荐