汇编 DUP嵌套的问题

hy5239 2010-03-01 10:38:23
初学汇编,在编译器上写TABLE DB 5(3)没有问题,可是如果写 TABLE DB 5 DUP(2,2 DUP(9,8))预想的结果是02,09,08,09,08循环5次,而实际是02,02,08循环5次。怎么会这样呢?请高手指教。
...全文
1388 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
zara 2010-03-01
  • 打赏
  • 举报
回复
奇怪!开始时,是出现过楼主说的 02, 02, 08 循环 5 次的情况的;后来给那语句加了些空格,就是预想的 02, 09, 08, 09, 08 循环了;可再返回原来的样子时,还是预想的情况。
应该是没有记错,定义语句也是直接从这里复制出去的。只是 dos 窗口,不能象 xp 的命令行模式那样记忆很多行,无法回去翻看了。
我的 ml.exe 是 6.0:
Microsoft (R) Macro Assembler Version 6.00
Copyright (C) Microsoft Corp 1981-1991. All rights reserved.

M:\>debug heh2.exe
-u
0B5D:0000 1E PUSH DS
0B5D:0001 33C0 XOR AX,AX
0B5D:0003 50 PUSH AX
0B5D:0004 B8540B MOV AX,0B54
....
-d b54:0 l 20
0B54:0000 02 09 08 09 08 02 09 08-09 08 02 09 08 09 08 02
0B54:0010 09 08 09 08 02 09 08 09-08
nanlingcg 2010-03-01
  • 打赏
  • 举报
回复
DATAS SEGMENT
TABLE DB 5 DUP(2,2 DUP(9,8))
DATAS ENDS

CODES SEGMENT
ASSUME CS:CODES,DS:DATAS
START:
MOV AX,DATAS
MOV DS,AX
MOV AX,BX
MOV AH,4CH
INT 21H
CODES ENDS
END START

-T

AX=0B73 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B63 ES=0B63 SS=0B73 CS=0B75 IP=0003 NV UP EI PL NZ NA PO NC
0B75:0003 8ED8 MOV DS,AX
-T

AX=0B73 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B73 ES=0B63 SS=0B73 CS=0B75 IP=0005 NV UP EI PL NZ NA PO NC
0B75:0005 8BC3 MOV AX,BX
-T

AX=0000 BX=0000 CX=002B DX=0000 SP=0000 BP=0000 SI=0000 DI=0000
DS=0B73 ES=0B63 SS=0B73 CS=0B75 IP=0007 NV UP EI PL NZ NA PO NC
0B75:0007 B44C MOV AH,4C
-D DS:0 50
0B73:0000 02 09 08 09 08 02 09 08-09 08 02 09 08 09 08 02 ................
0B73:0010 09 08 09 08 02 09 08 09-08 00 00 00 00 00 00 00 ................
0B73:0020 B8 73 0B 8E D8 8B C3 B4-4C CD 21 00 58 EB 03 E8 .s......L.!.X...
0B73:0030 1D 01 58 C3 F9 C3 55 51-26 8A 4F 08 32 ED 0B C9 ..X...UQ&.O.2...
0B73:0040 74 0D 8D 6F 09 E8 19 04-73 08 E8 0E 00 E2 F6 F9 t..o....s.......
0B73:0050 EB .
-

正常啊?
作  者:吴向军 等 著 丛 书 名:普通高等教育“十一五”国家级规划教材 出 版 社:高等教育出版社 ISBN:9787040279498 出版时间:2009-11-01 版  次:2 页  数:386 装  帧:平装 开  本:16开 内容简介   《汇编语言程序设计(第2版)》以16位/32位Intel CPU为介绍对象,以并行推进的方式介绍这两类CPU的指令系统,以达到相互参考、对照的效果。另外,本书还介绍了常用的编程环境和调试工具的使用方法。   在内容组织上,把学习高级语言的习惯和汇编语言的特点相结合,按“硬件资源—变量定义一指令系统—编程”的顺序安排相应的内容。结合MASM V6.1x的编程环境,使汇编语言源程序具有一定的高级语言特点和结构。书中用一章来介绍浮点数的表示、浮点运算指令和编程方法,使读者对高级语言中的各种数据类型与低层实现之间的联系有一个更清晰的认识。还用一章介绍了用汇编语言编写Windows应用程序的基本方法,为拓宽汇编语言的应用领域做一点尝试。   书中附有一些基本的编程辅助信息,这些信息包括各种按键的码值和显示颜色信息等。在Windows应用程序的编写部分,附录中给出了编程中所用到的一些常量列表和函数功能的说明。这些辅助信息可为编程带来一定的方便,也可作为常用手册以待查阅。   《汇编语言程序设计(第2版)》可作为计算机学科的本科生、大专生及相近专业学生的教材,也可作为相关工程技术人员的学习资料或参考书。 目录 第一章 预备知识 1.1 汇编语言的由来及其特点 1.1.1 机器语言 1.1.2 汇编语言 1.1.3 汇编程序 1.1.4 汇编语言程序的主要特点 1.1.5 汇编语言的应用领域 1.2 数据的表示和类型 1.2.1 数值数据的表示 1.2.2 非数值数据的表示 1.2.3 基本数据类型 习题 第二章 CPU资源和存储器 2.1 寄存器组 2.1.1 寄存器组 2.1.2 通用寄存器 2.1.3 段寄存器 2.1.4 专用寄存器 2.2 存储器的管理模式 2.2.1 16位微机的内存管理模式 2.2.2 32位微机的内存管理模式 习题 第三章 操作数的寻址方式 3.1 立即寻址方式 3.2 寄存器寻址方式 3.3 直接寻址方式 3.4 寄存器间接寻址方式 3.5 寄存器相对寻址方式 3.6 基址加变址寻址方式 3.7 相对基址加变址寻址方式 3.8 32位地址的寻址方式 习题 第四章 标识符和表达式 4.1 标识符 4.2 简单内存变量的定义 4.2.1 内存变量定义的一般形式 4.2.2 字节变量 4.2.3 字变量 4.2.4 双字变量 4.2.5 六字节变量 4.2.6 八字节变量 4.2.7 十字节变量 4.2.8 浮点类型变量 4.3 调整偏移量伪指令 4.3.1 偶对齐伪指令EVEN 4.3.2 对齐伪指令ALIGN 4.3.3 调整偏移量伪指令ORG 4.3.4 偏移量计数器的值 4.4 复合内存变量的定义 4.4.1 重复说明符DUP 4.4.2 结构类型的定义 4.4.3 联合类型的定义 4.4.4 记录类型的定义 4.4.5 数据类型的自定义 4.5 标号 4.6 内存变量和标号的属性 4.6.1 段属性操作符 4.6.2 偏移量属性操作符 4.6.3 类型属性操作符 4.6.4 长度屑性操作符 4.6.5 容量属性操作符 4.6.6 强制属性操作符 4.6.7 存储单元别名操作符 4.7 表达式 4.7.1 进制伪指令RADIX 4.7.2 数值表达式 4.7.3 地址表达式 4.8 符号定义语句 4.8.1 等价语句 4.8.2 等号语句 4.8.3 符号名定义语句 习题 第五章 微机CPU的指令系统 5.1 汇编语言指令格式 5.1.1 指令格式 5.1.2 指令的几个属性 5.2 指令系统 5.2.1 数据传送指令 5.2.2 标志位操作指令 5.2.3 算术运算指令 5.2.4 逻辑运算指令 5.2.5 移位操作指令 5.2.6 位操作指令 5.2.7 比较运算指令 5.2.8 循环指令 5.2.9 转移指令 5.2.10 条件设置字节指令 5.2.11 字符串操作指令 5.2.12 ASCⅡ-BCD码运算调整指令 5.2.13 处理器指令 习题 第六章 程序的基本结构 6.1 源程序的基本组成 6.1.1 段的定义 6.1.2 段寄存器的说明语句 6.1.3 堆栈段的说明 6.1.4 源程序的结构 6.2 程序的基本结构 6.2.1 顺序结构 6.2.2 分支结构 6.2.3 循环结构 6.3 段的基本属性 6.3.1 对齐类型(ALIGN) 6.3.2 组合类型(COMBINE) 6.3.3 类别(CLASS) 6.3.4 段组(GROUP) 6.4 简化的段定义 6.4.1 存储模式说明伪指令 6.4.2 简化段定义伪指令 6.4.3 简化段段名的引用 6.5 源程序的辅助说明伪指令 习题 第七章、子程序和库 7.1 子程序的定义 7.2 子程序的调用和返回指令 7.2.1 调用指令 7.2.2 返回指令 7.3 子程序的参数传递 7.3.1 寄存器传递参数 7.3.2 约定存储单元传递参数 7.3.3 堆栈传递参数 7.4 寄存器的保护与恢复 7.5 子程序的完全定义 7.5.1 子程序完全定义格式 7.5.2 子程序的位距 7.5.3 子程序的语言类型 7.5.4 子程序的可见性 7.5.5 子程序的“起始”和“结束”操作 7.5.6 寄存器的保护和恢复 7.5.7 子程序的参数传递 7.5.8 子程序的原型说明 7.5.9 子程序的调用伪指令 7.5.10 局部变量的定义 7.6 子程序库 7.6.1 建立库文件命令 7.6.2 建立库文件举例 7.6.3 库文件的应用 7.6.4库文件的好处 习题 第八章 输入输出和中断 8.1 输入输出的基本概念 8.1.1 I/O端口地址 8.1.2 I/O指令 8.2 中断 8.2.1 中断的基本概念 8.2.2 中断指令 8.2.3 中断返回指令 8.2.4 中断和子程序调用 8.3 中断功能的分类 8.3.1 键盘输入的中断功能 8.3.2 屏幕显示的中断功能 8.3.3 打印输出的中断功能 8.3.4 串行通信口的中断功能 8.3.5 鼠标的中断功能 8.3.6 目录和文件的中断功能 8.3.7 内存管理的中断功能 8.3.8 读取/设置中断向量 习题 第九章 宏 9.1 宏的定义和引用 9.1.1 宏的定义 9.1.2 宏的引用 9.1.3 宏的参数传递方式 9.1.4 宏的嵌套定义 9.1.5 宏与子程序的区别 9.2 宏参数的特殊运算符 9.2.1 连接运算符 9.2.2 字符串整体传递运算符 9.2.3 字符转义运算符 9.2.4 计算表达式运算符 9.3 与宏有关的伪指令 9.4 重复汇编伪指令 9.4.1 伪指令REPT 9.4.2 伪指令IRP 9.4.3 伪指令IRPC 9.5 条件汇编伪指令 9.5.1 条件汇编伪指令的功能 9.5.2 条件汇编伪指令的举例 9.6 宏的扩充 9.6.1 宏定义形式 9.6.2 重复伪指令REPEAT 9.6.3 循环伪指令WHILE 9.6.4 循环伪指令FOR 9.6.5 循环伪指令FORC 9.6.6 转移伪指令GOTO 9.6.7 宏扩充的举例 9.6.8 系统定义的宏 习题 第十章 应用程序设计 10.1 字符串的处理程序 10.2 数据的分类统计程序 10.3 数据转换程序 10.4 文件操作程序 10.5 动态数据的编程 10.6 COM文件的编程 10.7 驻留程序 10.8 程序段前缀及其应用 10.8.1 程序段前缀的字段含义 10.8.2 程序段前缀的应用 习题 第十一章 数值运算协处理器 11.1 协处理器的数据格式 11.1.1 有符号整数 11.1.2 BCD码数据 11.1.3 浮点数 11.2 协处理器的结构 11.2.1 协处理器的内部结构 11.2.2 状态寄存器 11.2.3 控制寄存器 11.2.4 标记寄存器 11.3 协处理器的指令系统 11.3.1 指令操作符的命名规则 11.3.2 数据传送指令 11.3.3 数学运算指令 11.3.4 比较运算指令 11.3.5 超越函数运算指令 11.3.6 常数操作指令 11.3.7 协处理器控制指令 11.4 协处理器的编程举例 习题 第十二章 汇编语言和C语言的混合编程 12.1 汇编指令的嵌入 12.2 C语言源程序的汇编输出 习题 第十三章 Windows应用程序的编程 13.1 消息框 13.2 编程伪指令 13.2.1 多路分支语句 13.2.2 调试语句 13.3 Windows程序的结构 13.3.1 Windows程序的基本结构 13.3.2 程序的初始化阶段 13.3.3 窗口的准备阶段 13.3.4 消息循环阶段 13.3.5 消息处理阶段 13.4 Windows应用程序 13.4.1 按钮控件的应用 13.4.2 对话框的定义 13.4.3 对话框和控件的应用 13.4.4 绘画和图像的应用 13.4.5 命令行参数的处理 习题 第十四章 汇编语言编程环境和调试工具 14.1 汇编语言编程环境 14.1.1 MASM 6.1x 14.1.2 Turbo Assembler 14.1.3 MASM32 14.2 调试工具 14.2.1 Debug 14.2.2 CodeView 14.2.3 Turbo Debugger 14.2.4 VKdebug 附录 附录一 键盘按键的各种编码对照表 附录二 显示地址及其显示属性 附录三 Windows中各类预定义常量 附录四 Windows应用程序中部分API函数 参考文献
目录 历史 前言 I. C语言入门 1. 程序的基本概念 1. 程序和编程语言 2. 自然语言和形式语言 3. 程序的调试 4. 第一个程序 2. 常量、变量和表达式 1. 继续Hello World 2. 常量 3. 变量 4. 赋值 5. 表达式 6. 字符类型与字符编码 3. 简单函数 1. 数学函数 2. 自定义函数 3. 形参和实参 4. 全局变量、局部变量和作用域 4. 分支语句 1. if语句 2. if/else语句 3. 布尔代数 4. switch语句 5. 深入理解函数 1. return语句 2. 增量式开发 3. 递归 6. 循环语句 1. while语句 2. do/while语句 3. for语句 4. break和continue语句 5. 嵌套循环 6. goto语句和标号 7. 结构体 1. 复合类型与结构体 2. 数据抽象 3. 数据类型标志 4. 嵌套结构体 8. 数组 1. 数组的基本概念 2. 数组应用实例:统计随机数 3. 数组应用实例:直方图 4. 字符串 5. 多维数组 9. 编码风格 1. 缩进和空白 2. 注释 3. 标识符命名 4. 函数 5. indent工具 10. gdb 1. 单步执行和跟踪函数调用 2. 断点 3. 观察点 4. 段错误 11. 排序与查找 1. 算法的概念 2. 插入排序 3. 算法的时间复杂度分析 4. 归并排序 5. 线性查找 6. 折半查找 12. 栈与队列 1. 数据结构的概念 2. 堆栈 3. 深度优先搜索 4. 队列与广度优先搜索 5. 环形队列 13. 本阶段总结 II. C语言本质 14. 计算机中数的表示 1. 为什么计算机用二进制计数 2. 不同进制之间的换算 3. 整数的加减运算 3.1. Sign and Magnitude表示法 3.2. 1's Complement表示法 3.3. 2's Complement表示法 3.4. 有符号数和无符号数 4. 浮点数 15. 数据类型详解 1. 整型 2. 浮点型 3. 类型转换 3.1. Integer Promotion 3.2. Usual Arithmetic Conversion 3.3. 由赋值产生的类型转换 3.4. 强制类型转换 3.5. 编译器如何处理类型转换 16. 运算符详解 1. 位运算 1.1. 按位与、或、异或、取反运算 1.2. 移位运算 1.3. 掩码 1.4. 异或运算的一些特性 2. 其它运算符 2.1. 复合赋值运算符 2.2. 条件运算符 2.3. 逗号运算符 2.4. sizeof运算符与typedef类型声明 3. Side Effect与Sequence Point 4. 运算符总结 17. 计算机体系结构基础 1. 内存与地址 2. CPU 3. 设备 4. MMU 5. Memory Hierarchy 18. x86汇编程序基础 1. 最简单的汇编程序 2. x86的寄存器 3. 第二个汇编程序 4. 寻址方式 5. ELF文件 5.1. 目标文件 5.2. 可执行文件 19. 汇编与C之间的关系 1. 函数调用 2. main函数和启动例程 3. 变量的存储布局 4. 结构体和联合体 5. C内联汇编 6. volatile限定符 20. 链接详解 1. 多目标文件的链接 2. 定义和声明 2.1. extern和static关键字 2.2. 头文件 2.3. 定义和声明的详细规则 3. 静态库 4. 共享库 4.1. 编译、链接、运行 4.2. 动态链接的过程 4.3. 共享库的命名惯例 5. 虚拟内存管理 21. 预处理 1. 预处理的步骤 2. 宏定义 2.1. 函数式宏定义 2.2. 内联函数 2.3. #、##运算符和可变参数 2.4. 宏展开的步骤 3. 条件预处理指示 4. 其它预处理特性 22. Makefile基础 1. 基本规则 2. 隐含规则和模式规则 3. 变量 4. 自动处理头文件的依赖关系 5. 常用的make命令行选项 23. 指针 1. 指针的基本概念 2. 指针类型的参数和返回值 3. 指针与数组 4. 指针与const限定符 5. 指针与结构体 6. 指向指针的指针与指针数组 7. 指向数组的指针与多维数组 8. 函数类型和函数指针类型 9. 不完全类型和复杂声明 24. 函数接口 1. 本章的预备知识 1.1. strcpy与strncpy 1.2. malloc与free 2. 传入参数与传出参数 3. 两层指针的参数 4. 返回值是指针的情况 5. 回调函数 6. 可变参数 25. C标准库 1. 字符串操作函数 1.1. 初始化字符串 1.2. 取字符串的长度 1.3. 拷贝字符串 1.4. 连接字符串 1.5. 比较字符串 1.6. 搜索字符串 1.7. 分割字符串 2. 标准I/O库函数 2.1. 文件的基本概念 2.2. fopen/fclose 2.3. stdin/stdout/stderr 2.4. errno与perror函数 2.5. 以字节为单位的I/O函数 2.6. 操作读写位置的函数 2.7. 以字符串为单位的I/O函数 2.8. 以记录为单位的I/O函数 2.9. 格式化I/O函数 2.10. C标准库的I/O缓冲区 2.11. 本节综合练习 3. 数值字符串转换函数 4. 分配内存的函数 26. 链表、二叉树和哈希表 1. 链表 1.1. 单链表 1.2. 双向链表 1.3. 静态链表 1.4. 本节综合练习 2. 二叉树 2.1. 二叉树的基本概念 2.2. 排序二叉树 3. 哈希表 27. 本阶段总结 III. Linux系统编程 28. 文件与I/O 1. 汇编程序的Hello world 2. C标准I/O库函数与Unbuffered I/O函数 3. open/close 4. read/write 5. lseek 6. fcntl 7. ioctl 8. mmap 29. 文件系统 1. 引言 2. ext2文件系统 2.1. 总体存储布局 2.2. 实例剖析 2.3. 数据块寻址 2.4. 文件和目录操作的系统函数 3. VFS 3.1. 内核数据结构 3.2. dupdup2函数 30. 进程 1. 引言 2. 环境变量 3. 进程控制 3.1. fork函数 3.2. exec函数 3.3. wait和waitpid函数 4. 进程间通信 4.1. 管道 4.2. 其它IPC机制 5. 练习:实现简单的Shell 31. Shell脚本 1. Shell的历史 2. Shell如何执行命令 2.1. 执行交互式命令 2.2. 执行脚本 3. Shell的基本语法 3.1. 变量 3.2. 文件名代换(Globbing):* ? [] 3.3. 命令代换:`或 $() 3.4. 算术代换:$(()) 3.5. 转义字符\ 3.6. 单引号 3.7. 双引号 4. bash启动脚本 4.1. 作为交互登录Shell启动,或者使用--login参数启动 4.2. 以交互非登录Shell启动 4.3. 非交互启动 4.4. 以sh命令启动 5. Shell脚本语法 5.1. 条件测试:test [ 5.2. if/then/elif/else/fi 5.3. case/esac 5.4. for/do/done 5.5. while/do/done 5.6. 位置参数和特殊变量 5.7. 函数 6. Shell脚本的调试方法 32. 正则表达式 1. 引言 2. 基本语法 3. sed 4. awk 5. 练习:在C语言中使用正则表达式 33. 信号 1. 信号的基本概念 2. 产生信号 2.1. 通过终端按键产生信号 2.2. 调用系统函数向进程发信号 2.3. 由软件条件产生信号 3. 阻塞信号 3.1. 信号在内核中的表示 3.2. 信号集操作函数 3.3. sigprocmask 3.4. sigpending 4. 捕捉信号 4.1. 内核如何实现信号的捕捉 4.2. sigaction 4.3. pause 4.4. 可重入函数 4.5. sig_atomic_t类型与volatile限定符 4.6. 竞态条件与sigsuspend函数 4.7. 关于SIGCHLD信号 34. 终端、作业控制与守护进程 1. 终端 1.1. 终端的基本概念 1.2. 终端登录过程 1.3. 网络登录过程 2. 作业控制 2.1. Session与进程组 2.2. 与作业控制有关的信号 3. 守护进程 35. 线程 1. 线程的概念 2. 线程控制 2.1. 创建线程 2.2. 终止线程 3. 线程间同步 3.1. mutex 3.2. Condition Variable 3.3. Semaphore 3.4. 其它线程间同步机制 4. 编程练习 36. TCP/IP协议基础 1. TCP/IP协议栈与数据包封装 2. 以太网(RFC 894)帧格式 3. ARP数据报格式 4. IP数据报格式 5. IP地址与路由 6. UDP段格式 7. TCP协议 7.1. 段格式 7.2. 通讯时序 7.3. 流量控制 37. socket编程 1. 预备知识 1.1. 网络字节序 1.2. socket地址的数据类型及相关函数 2. 基于TCP协议的网络程序 2.1. 最简单的TCP网络程序 2.2. 错误处理与读写控制 2.3. 把client改为交互式输入 2.4. 使用fork并发处理多个client的请求 2.5. setsockopt 2.6. 使用select 3. 基于UDP协议的网络程序 4. UNIX Domain Socket IPC 5. 练习:实现简单的Web服务器 5.1. 基本HTTP协议 5.2. 执行CGI程序 A. 字符编码 1. ASCII码 2. Unicode和UTF-8 3. 在Linux C编程中使用Unicode和UTF-8 B. GNU Free Documentation License Version 1.3, 3 November 2008 参考书目 索引
微机原理与应用试卷 一、单项选择题(每小题 1 分共 10 分) 1. 0.6875D的二进制为 ( ) ① 0.0111B ② 0.1101B ③ 0.1011B ④ 0.1111B 2. 一条指令执行完后,CS=1000H,IP=1052H,则下一条指令的地址为 ( ) ① 2025H ② 11052H ③ 01052H ④ 10520H 3. 8088数据输出为多少位。 ( ) ① 4 ② 8 ③ 16 ④ 32 4. 若8086 CPU主频为8MHz,则其基本总线周期为 ( ) ① 200ns ② 500ns  ③ 125ns ④ 250ns 5. 若内存每个存储单元为16位,则 ( ) ① 其地址线也为16位 ② 其地址线与16无关 ③ 其地址线与16有关 ④ 以上均不正确 6. 用2K×4位的RAM芯片组成16K字节的存储器,共需RAM芯片为多少 ( ) ① 16片 ② 8片 ③ 4片 ④ 32片 7. 8088最多能处理多少种中断 ( ) ① 128 ② 256 ③ 512 ④ 1024 8. 设8255A的方式选择控制字为92H,其含义是 ( ) ① A、B、C口全为输出 ② A、B、C口全为输入 ③ A、B口为输入,C口为输出 ④ A、B口为输出,C口为输入 9.计算机内的“溢出”是指其运算的结果 ( ) ① 为无穷大 ② 超出了计算机内存单元所能存储的数值范围 ③ 超出了该指令所指定的结果单元所能存储的数值范围 ④ 以上都不对 10. DOS功能调用的功能号是 ( ) ① 10H ② 11H ③ 13H ④ 21H 二、填空题(每空2分,共20分) 1.8086CPU中,堆栈指令是________位数据传送指令。 2. 8088在访问4个当前段时,代码段、数据段及堆栈段的偏移量分别由     、 和_________提供。 3. 指令MOV [BP],AX中,源操作数的寻址方式是 ,目的操作数的寻址方式是 。 4.串行异步接口在接收时是由 寄存器将串行数据转换成并行数据。在发送时,是由     寄存器将并行数据转换成串行数据。 5.8253A使用了 个端口地址。 6. 要管理64级可屏蔽中断,需要级联的8259A芯片数为 。 三、判断改错题(每题1分,共10 分) 1. EU和BIU在CPU内部是串行工作的。 ( ) 2. 字型或双字型数据在内存中的存放规则是数据的低位放在低地址,数据的高位放在高地址。 ( ) 3. 8086 CPU内标志寄存器中的控制标志位占3位。 ( ) 4. 在最小方式下,为了从存储器或I/O端口读出数据, 信号在T1状态必须为有效状态,=0,读存储器,=1,读I/O端口。 ( ) 5. 数据传送类指MOV不影响标志位。 ( ) 6. 执行POP AX 指令后,栈顶指针减2。 ( ) 7.多个外设可以通过一条中断请求线,向CPU发中断请求。 ( ) 8. RS-232C接口是常用的串行通信接口,这个接口可用地址总线寻址。 ( ) 9. 8086/8088在当前指令执行完且IF=1的情况下可以响应一个外部INTR中断请求。( ) 10. 8086被复位后,寄存器Flag、IP、CS的内容分别是0000 、0001 、FFFFH。 ( ) 四、汇编程序(共20分) 1. 试分析下面的程序段完成什么操作?(本题5分) MOV CL,04 SHL DX,CL MOV BL,AH SHL AX,CL SHR BL,CL OR DL,BL 答案: 2、下列程序段执行完后,A单元的内容是 H 。(本题5分) DATA SEGMENT A DW 0 B DW 0 C DW 230,20,54 DATA ENDS ;- - - - - - - - - - - - - - - - - - - - - - - - - - CODE SEGMENT … MOV BX,OFFSET C MOV AX,[BX] ADD B,AX MOV AX,2[BX] SAL AX,1 ADD AX,B MOV A,AX … CODE ENDS 3. 分析下列程序的功能,写出堆栈最满时各单元的地址及内容。(本题5分) SSEG SEGMENT ‘STACK’ AT 1000H ; 堆栈的段地址为1000H DW 128 DUP(?) TOS LABEL WORD SSEG ENDS ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - DSEG SEGMENT DW 32 DUP(?) DSEG ENDS ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - CSEG SEGMENT MAIN PROC FAR ASSUME CS:CSEG, DS:DSEG,SS:SSEG START: MOV AX,SSEG MOV SS,AX MOV AX,DSEG MOV DS,AX MOV AX,4321H CALL HTOA RETN: MOV AH,4CH INT 21H MAIN ENDP ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - HTOA PROC NEAR CMP AX,15 JLE B1 PUSH AX PUSH BP MOV BP,SP MOV BX,[BP+2] AND BX,0FH MOV [BP+2],BX POP BP MOV CL,4 SHR AX,CL CALL HTOA B1: POP AX B2: ADD AL,30H JL PRT ADD AL,07 PRT: MOV DL,AL MOV AH,2 INT 21H RET HTOA ENDP CSEG ENDS ; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - END START 4.编一子程序,实现平方运算(不用乘法指令,BX个BX相加)入口参数BX,出口参数BX。(本题5分) 五、简答题(每题5分,共20分) 用十进制写出下列补码表示的数及其数的真值:1BH,71H,80H,F8H。 2. 下面的数据项设置了多少个字节? (1)ASC_DATA DB ‘1234’ (2)HEX_DATA DW 1234H (3)DATA_1 DB 6 DUP(4 DUP(0FFH)) 3. 在8086中,逻辑地址、偏移地址、物理地址分别指的是什么?具体说明。 4. 什么是硬件中断和软件中断?在PC机中两者的处理过程有什么不同? 六、综合应用题(每题10分,共20 分) 现有16K×1位的动态存储器芯片若干,欲构成64K×8位的存储器,试求: 所需动态RAM芯片个数。 画出该存储器组成的逻辑框图 设该存储器读/写周期均为0.5us,CPU点在1us内至少访问一次,试问采用那种刷新方式比较合理?两次刷新的最大时间间隔是多少? 2. 一个微机系统中包含以下器件:微处理器8086一片,并行接口8255A一片(设备号:A口—60H,B口—62H,C口—64H,控制口—66H),定时器8253一片(设备号:计数器0—70H,计数器1—72H,计数器2—74H,控制口76H),中断控制器8259A一片(设备号:C0H,C2H)。现将8255的A口连接一输入设备,工作在0方式。B口连接一输出设备,也工作在0方式,PC4作为输出设备的选通输出端且低电平有效。8253工作于“模式0”,设置计数器0的计数常数为1080H,进行二进制计数。8259A的ICW2给定为80H,工作于电平触发方式,全嵌套中断优先级,数据总线无缓冲,采用中断自动结束方式。请填充下面程序中的空白项(注意:控制字中可0可1位选0,8255未用端口设成输入方式),(微处理器8086的A1、A2接各芯片的A0、A1)。 MOV AL,________ ; 8255初始化 OUT ________, AL MOV AL, ________ ; 8253初始化 OUT ________, AL MOV AL, ______ ;设8253计数初值 OUT ________, AL MOV AL, _______ ; OUT ________, AL MOV AL,_______ ; 8259A初始化 OUT ________, AL MOV AL, _______ ; OUT ________, AL MOV AL,_________ OUT _________, AL IN AL,_________ ; 从8255的A口读入数据 PUSH AX MOV AL,_______ ; 用按位置位/复位方式使选通无效 OUT ________, AL POP AX OUT ________, AL ; 往B口输出数据 MOV AL, ________ ; 用按位置位/复位方式使选通有效 OUT ________, AL MOV AL , ______ ; 撤消选通信号 OUT ________, AL 此时,对应8259A的IR1中断类型号是_______, 中断向量存放在0段 _______, _______ , _______, _______, 单元中。(本题10分) 微机原理与应用试题5标准答案 一、选择题(每题1分,共10分) 1. ③ 2. ② 3. ② 4. ③ 5. ② 6. ① 7. ② 8. ③ 9. ③ 10. ④ 二、填空题(每空2分,共20分) 16 IP、由寻址方式决定的16位偏移量、SP 寄存器寻址、寄存器间接寻址 接收移位、发送移位 4 6. 9 三、判断题(每题1分,共10分) 1. X 2. √ 3.√ 4. X 5.√ 6.X 7. √ 8. X 9. √ 10. X 四、汇编程序(共20分) 1. 答案: (本题5分) 27,113,-128,-8 2. 答案(本题5分) 4、2、24 3.答:(5分) 1000:0F2H B1 1000:0F4H 3 1000:0F6H B1 1000:0F8H 2 1000:0FAH B1 1000:0FCH 1 1000:0FEH RETN 1000:100H 4.答: SQR PROC FAR PUSH AX PUSH CX CMP BX,0 JGE L NEG BX L: MOV CX,BX MOV AX,0 LOP:ADD AX,BX LOOP LOP MOV BX,AX POP CX POP AX RET SQR ENDP (5分) 五、简答题(共20分) 1. 答:系统中若存在多个可控制总线的主模块时,其中之一若要使用总线进行数据传输时,需向系统请求总线的控制权,这就是一个总线请求的过程。8086在最小工作模式下有关总线请求的信号引脚是HOLD与HLDA。 2.答:执行部件有8个16位寄存器,AX、BX、CX、DX、SP、BP、DI、SI。AX、BX、CX、DX一般作为通用数据寄存器。SP为堆栈指针存器,BP、DI、SI在间接寻址时作为地址寄存器或变址寄存器。总线接口部件设有段寄存器CS、DS、SS、ES和指令指针寄存器IP。段寄存器存放段地址,与偏移地址共同形成存储器的物理地址。IP的内容为下一条将要执行指令的偏移地址,与CS共同形成下一条指令的物理地址。 3. 答:逻辑地址是在程序中对存储器地址的一种表示方法,由段地址和段内偏移地址两部分组成,如1234H:0088H。偏移地址是指段内某个存储单元相对该段首地址的差值,是一个16位的二进制代码。物理地址是8086芯片引线送出的20位地址码,用来指出一个特定的存储单元。 4. 答:硬件中断是通过中断请求线输入电信号来请求处理机进行中断服务;软件中断是处理机内部识别并进行处理的中断过程。硬件中断一般是由中断控制器提供中断类型码,处理机自动转向中断处理程序;软件中断完全由处理机内部形成中断处理程序的入口地址并转向中断处理程序,不需外部提供信息。 六、综合应用题(共20分) 答;(1)需要32片 (2)电路图如下图所示。 (3)根据已知条件,CPU在1us内至少需访问一次,所以整个存储器的平均读写周期与单个存储器的读写周期相接近,应采用集中式刷新比较合理,因为集中式刷新方法适合于高速存储器。动态存储器两次刷新的最大时间不应超过2us. 2. 答: MOV AL, 91H ; 8255初始化 OUT 66H , AL ; MOV AL, 30H ; 8253初始化 OUT 76H , AL ; MOV AL, 80H ;设8253计数初值 OUT 70H , AL ; MOV AL, 10H ; OUT 70H , AL ; MOV AL, 1BH ; 8259A初始化 OUT C0H , AL ; MOV AL, 80H ; OUT C2H , AL ; MOV AL, 03H ; OUT C2H , AL ; IN AL, 60H ; 从8255的A口读入数据 PUSH AX ; MOV AL, 09H ; 用按位置位/复位方式使选通无效 OUT 66H , AL ; POP AX ; OUT 62H , AL ; 往B口输出数据 MOV AL, 08H ; 用按位置位/复位方式使选通有效 OUT 66H , AL ; MOV AL , 09H ; 撤消选通信号 OUT 66H , AL 此时,对应8259A的IR5中断类型号是 85H ; 中断向量存放在0段 214H , 215H , 216H , 217H 单元中。

21,458

社区成员

发帖
与我相关
我的任务
社区描述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。
社区管理员
  • 汇编语言
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧