1、微机原理第四章练习题及解 一:单项选择题 汇 编源程序 文件的扩 展名是 ( C )。 A :* LST B :* OBJ C :* ASM D :* EXE 源 程序文件 汇编后的 目标文 件的扩展 名是( B )。 A :* LST B :* OBJ C :* ASM D :* EXE 目 标文件连 接后的可 执行文 件的扩展 名是( D )。 A :* LST B :* OBJ C :* ASM D :* EXE 下 列可作为 标识符用 的字符 串是( C )。 A :MOV B :ZF C :FAH D :PTR 下 列为寄存 器名的字 符串是 ( B )。 A :ZP B :BP C
2、 :AP D :CP 下 列为状态 标志的字 符串是 ( A )。 A :ZP B :BF C :DF D :TF 下 列为控标 志的字符 串是( D )。 A :ZP B :SF C :OF D :TF 下 列为指令 助记符的 字符串 是( C )。 A :ADCC B :AAAA C :SUB D :POOP 下 列为运算 符的字符 串是( B )。 A :ADC B :PTR C :OAG D :LOOP 定 义字类型 的伪指令 符是( B )。 A :DB B :DW C :DD D :DQ 说 明字节类 型的伪指 令符是 ( C )。 A :WORD B :DWORD C :BYTE
3、 D :SHOR 返 回变量段 属性的伪 指令符 是( B )。 A :OFFSET B :SEG C :TYPE D :SIZE 定 义过程结 束的伪指 令符是 ( C )。 A :END B :ENDS C :ENDP D :ENDM 下 列为段定 义的伪指 令是( B )。 A :PROC B :SEGMENT C :ASSUME D :STRUC 下 列为符号 定义的伪 指令是 ( B )。 A :ORG B :EQU C :STR D :RET 二:填空题 将 指令助记 符翻译为 指令机 器码的过 程称为 ( 汇编 )。 汇 编程序的 功能是输 入扩展 名为 ASM 的( 汇 编源程
4、 序 ) 文件, 输出扩 展名为 OBJ 的( 目标 代码 ) 文件和 扩展名 为 LST 的( 列表 )文件。 汇编源程 序中 的保 留字 类型 有( 寄存 器名 )、( 标 志名 )、( 指令 助记符 )、 ( 伪指令 符 )和 ( 运 算符 )。 汇 编源程序 中, FAH 是( 变量 ); 0FAH 是( 常量 )。 汇 编源程序 中,ABC 和 abc 是意义( 相同 ) 的标识 符。 汇 编源程序 中, ( 指令 ) 前 的标号应 加冒号 ; ( 伪 指令 ) 前的 标号不加冒 号。 汇编源程 序经 汇编后, ( 指 令助 记符 )将 翻译 为 机器 码; ( 伪指 令符 )将 不
5、会翻 译为机器 码。 变 量具有( 段 基址 )属性、 ( 偏移 量地址 ) 属性 和( 数 据类型 )属性 。 汇 编源程序 中,BUF + 4 是( 表 达式 ); BX + 4 是( 寻 址方式 )。 段 定义伪指 令是( SEGMENT ) ; 段 说明伪指 令是( ASSUME )。 过 程定义伪 指令是( PROC ) ; 宏定义 伪指令是 ( MACRO )。 ENDS 是( 段 ) 定 义 结束伪 指令;ENDP 是( 过程 ) 定 义 结束伪指 令; ENDM 是( 宏 ) 定 义结束 伪指令 。 宏 调用在( 源 程 序汇编 )时 完 成;过程调用 在 ( 执行程序 执行
6、)时 完 成。 要返回符号 地址 的段基 址属性 应使 用( SEG )运算符; 要返 回符号 地址的 段内 偏 移地址属 性应使用 ( OFFSET ) 运 算符; 要返 回符号地 址的数据 类型属性 应使 用( TYPE )运算符 。 定 义字节类 型变量的 伪指令 是( DB ) ; 定义 字类型变 量的伪 指令是( DW )。 说 明字节类 型的伪指 令是( BYTE ) ; 说 明字类 型的伪指 令是( WORD )。 执 行顺序程 序语句时, 指令指 针 IP 的 值会 ( 自 动加 1 ) ; 执行条 程序语句 时, 指令 指针 IP 的 值根据 条件而 ( 跳变 )。 在 先循
7、环后 判断的循 环结构 中,一般 判断( CX )寄存器 中 的值是否 为 0 。 执 行指令 MOV AL ,80H+90H后 ,( AL )= ( 10H )、 CF = ( 0 )。 执 行指令 MOV AL ,NOT 0FFH 后 ,( AL )= ( 00H )。 执 行指令 MOV AL ,2 LT 5 后 ,( AL )= ( FFH )。 与 指令 MOV AL ,LOW BX 功 能 相同 的指令是 ( MOV AL ,BL )。 若 BUF 为字节类 型变量, 完成指 令MOV AX,( WORD ) PTR BUF 。 指令 AND AL ,BL OR 0FFH中 ,(
8、AND ) 是 指令助 记符; ( OR )是运算 符 ;( BL OR 0FFH )是表达 式。 伪 指令 END 的 功能是( 结束汇编 )。 伪 指令 ENDS 的 功能是 ( 结束 段定义 )。 伪 指令 ENDP 的功 能是( 结 束过 程定义 )。 伪 指令 ENDM 的功能 是( 结 束宏定 义 )。 指令 MUL BYTE PTRBX中 ,( MUL )是指令 助记符 ; ( BYTE )是伪指 令 ;( PTR )是运算符 ; ( BYTE PTRBX )是表达式 。 调用过程 时,入 口参 数和 出口参 数传 递的方 法有 ,通过 ( 寄 存器 )传 递 参数 ;通 过(
9、存储 器 )传 递参数 ;通过( 堆栈 ) 传递 参数。 21H 的 DOS 功 能调用的 应用过 程为, 将功 能号送 寄存器 ( AH ) ;取入口参数;执 行( INT 21H ) 指令 ;获得出 口参数 。 INT 21H 中 断 的功能号 为 01H ,它 的出口 参数送寄 存器( AL )。 INT 21H 中 断 的功能号 为 02H ,它 的入口 参数送寄 存器( DL )。 三:判断题 汇 编语言源 程序文件 的扩展 名是 ASM ( )。 伪 指令符经 汇编将翻 译为指 令机器码 ( )。 伪 指令符 经 汇编将翻 译为指 令机器码 ( )。 符号 AAA 是 指 令助 记
10、符( )。 符号 BBB 是指令 助记符( )。 符号 ORG 是伪指 令符( )。 变 量有数据 类型属性 、段属 性和偏移 量属性 ( )。 BUF+4 是表 达式;BX+4 也 是表达式 ( )。 伪 指令 EQU 和伪指 令= 的功能完 全一样 ( )。 表 达式 OFFSET BUF 将返回变 量 BUF 的段首地 址( )。 执 行指令 MOV AL ,80H+90H 后, 标志位 CF = 1 ( )。 符号 FAH 是变量 ;符 号 0FAH 是常 量( )。 指令MOV AL ,BL 和指令MOV AL ,LOW BX 的 功 能一样( )。 符号$ 和 符号= 都是运 算符
11、( )。 符号 AND 是 指令助 记符也 是运算符 ( )。 段 定义伪指 令是 SEGMENT ; 段 结束定 义伪指 令是 ENDS ( )。 过 程定义伪 指令 是 PROC ; 过程结 束定义伪 指令是 ENDS ( )。 过 程调用和 宏调用都 发生在 程序运行 时( )。 伪 指令 END 、ENDS 、ENDP 和 ENDM 的功 能完全一 样( )。 四:简答题 汇 编语言程 序的设计 过程? 【 解】 : 汇编 语言源程 序的编 辑, 产 生扩展 名为 ASM 的 ASCII 码文件; 汇编源 程序 的汇编 , 产 生扩展名 为 OBJ 的 浮动目标 代码文件 ; 目标 代
12、码文件 的连接 , 产生扩 展名 为 EXE 的 可执行文 件。 指 令、伪指 令、标识 符在汇 编语言中 的作用 ? 【 解】 :汇编语 言源程序 设计中 , 用指令 助记符表 示指令 机器码;用符号地 址表示 存储器真 实 地址;用 伪指令管 理整个源 程序。源 程序经 汇编后, 指令助记 符被翻译 为指令 机 器码 ;符号 地址用真 实地址 替换;而 伪指令 无任何翻 译结果。 伪 指令 END 、ENDS 、ENDP 、ENDM 的 作用? 【 解】 : END 为 汇编源 程序结束 伪指令, 出现在 源程序的 最后一行 ;ENDS 为段 (结 构) 定 义 结束伪指 令,出现 在定义
13、 段的最后 一行;ENDP 为过 程定义结 束伪指令 ,出现 在 过 程定义的 最后一行 ;ENDM 为 宏定义 结束伪指 令,出现 在宏定 义的最后 一行。 在 数据段中 定义的地 址变量 的属性? 【 解】 : 地址 变量具有 三个属性 , 即 变量的段 属性;变量的 段内偏移 量属性 ; 变量 的类型属 性。 过 程调用和 宏调用的 特点? 【 解】 : 过程调 用发生在 程序的 执 行过程 中,由于 重复调 用可节省 指令机器 码的存 放空间, 由 于调用时 需保护现 场调用 后需恢复 现场会 将耗费较 多的时间, 即过程调 用省空 费 时; 宏调用发 生在源 程序的汇 编过程 中,由
14、于重 复考贝 会占用较 多指令机 器码的 存 放 空间,由于 执行程 序时宏调 用无现 场保护和 恢复将不 会耗费 更多的时 间,即宏 调 用 省时费空 。 伪 指令 DB 和 BYTE 的使用特 点? 【 解】 : DB 为字 节数据 类型定义 伪指令, 用 于在数 据段中定 义地址变 量的数 据类型;BYTE 为 字节数据 类型的说 明伪指 令,用于 在代码 段中对指 令操作数 进行数 据类型说明。 五:编程题 已 知在 ARRA Y 数组中有 100 个带 符号字 节数据 , 编写 一个完整 的 8086 汇编 语言程 序, 统 计出 AR R AY 数 组 数据中 的正、 负数的个 数
15、并存 入 NP 、NN 单元中 。 解: DATA SEGMENT ARRAY DB 100DUP (?) NP DB ? NN DB ? DATA ENDS CODE SEGMENT ASSUME CS :CODE , DS :DATA MAIN PROC FAR PUSH DS MOV AX , 0 PUSH AX MOV AX , DATA MOV DS , AX LEA BX , ARR AY MOV CX , 80 MOV DH, 0 ; 存放正数个 数 MOV DL, 0 ; 存 放 负数个数 AG: MOV AL , BX TEST AL, 80H JZ GONP INC DL
16、JMP NEXT GONP: INC DH NEXT: INC BX DEC CX JNZ AG MOV NP, DH MOV NN, DL RET MAIN ENDP CODE ENDS END MAIN 已 知在 ARRA Y 数组中有 100 个无 符号字 节数据 , 编写 一个完整 的 8086 汇编 语言程 序, 统 计出 AR R AY 数 组 数据中 的奇、 偶数的个 数并存 入 NP 、NN 单元中 。 解: DATA SEGMENT ARRAY DB 100DUP (?) NP DB ? NN DB ? DATA ENDS CODE SEGMENT ASSUME CS :CO
17、DE , DS :DATA MAIN PROC FAR PUSH DS MOV AX , 0 PUSH AX MOV AX , DATA MOV DS , AX LEA BX , ARR AY MOV CX , 80 MOV DH, 0 ; 存放奇数个 数 MOV DL, 0 ; 存 放 偶数个 数 AG: MOV AL , BX TEST AL, 01H JNZ GONP INC DL JMP NEXT GONP: INC DH NEXT: INC BX DEC CX JNZ AG MOV NP, DH MOV NN, DL RET MAIN ENDP CODE ENDS END MAIN
18、已 知有一 个 4K 字节的 数据块 ,存放在 以 3DA0H :1000H 开始 的存储区 域内,要 求编 写 一个完整的 8086 汇 编语言源 程序, 将该数据 块搬至 3DA0H :1008H 开始的存 储区 内。 解: DATA SEGMENT AT 3DA0H ORG 1000H AVR1 DB 4096 DUP(?) ORG 1008H AVR2 DB 4096 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA MAIN PROC FAR PUSH DS MOV AX, 0 PUSH AX MOV AX, DATA MOV
19、 DS, AX LEA SI, A VR1 L E A D I, AV R 2 MOV CX, 100 ADD SI, 4095 ADD DI, 4095 AG: MOV AL, SI MOV DI, AL DEC SI DEC DI DEC CX JNZ AG RET MAIN ENDP CODE ENDS END MAIN 已 知一个长 度为 100 个 字节的数 据块存放在 2000H:1000H 开始 的地址中 , 现要将 该数 据 块移动 到 2000H :1010H 开始的 地址中 , 用串传 送指令编 写完整 的汇编语 言源程 序 。 解: DATA SEGMENT AT 200
20、0H ORG 1000H AVR1 DB 100 DUP(?) ORG 1010H AVR2 DB 100 DUP(?) DATA ENDS CODE SEGMENT ASSUME CS:CODE, DS:DATA, ES:DATA MAIN PROC FAR PUSH DS MOV AX, 0 PUSH AX MOV AX, DATA MOV DS, AX MOV ES, AX LEA SI, A VR1 L E A D I, AV R 2 MOV CX, 100 ADD SI, 99 ADD DI, 99 STD ; DF = 1 REP MOVSB RET MAIN ENDP CODE
21、ENDS END MAIN 已知 数据段 有 100 个 无符号 字节数据 块 BUF , 编 写一个 完整的 8086 汇 编语言程 序, 将 BUF 中的 最小 数放放入 MIN 单元中 。 解: DATA SEGMENT BUF DB 100DUP ( ?) MIN DB ? DATA ENDS CODE SEGMENT ASSUME CS :CODE , DS :DATA MAIN PROC FAR PUSH DS MOV AX , 0 PUSH AX MOV AX , DATA MOV DS , AX LEA BX , BUF MOV CX , 100 MOV AL , BX AG
22、: INC BX CMP AL , BX JBE GOON MOV AL , BX GOON :DEC CX JNZ AG MOV MIN , AL RET MAIN ENDP CODE ENDS END MAIN 已 知在 AR R AY 数组中有 80 个 无符号字 数据, 编写一个 完整 的 8086 汇 编语言程 序, 将 ARR AY 数 组中 的最大值 放入 MAX 单 元中。 解: DATA SEGMENT ARRAY DW 80DUP (? ) MAX DW ? DATA ENDS CODE SEGMENT ASSUME CS :CODE , DS :DATA MAIN PRO
23、C FAR PUSH DS MOV AX , 0 PUSH AX MOV AX , DATA MOV DS , AX LEA BX , AR R AY MOV CX , 80 MOV AX , BX AG : INC BX INC BX CMP AX , BX JAE GOON MOV AX , BX GOON :DEC CX JNZ AG MOV MAX , AX RET MAIN ENDP CODE ENDS END MAIN 有 字符串”WELCOME TO YOU”, 编 写 完整程 序统 计串中 字符 O 出 现的次数, 并 将 次数存 入 NUM 单元中 解: DATA SEGME
24、NT ARR AY DB WELCOME TO YOU COUNT EQU $ - AR R AY NUM DB ? DATA ENDS CODE SEGMENT ASSUME CS :CODE , DS :DATA MAIN PROC FAR PUSH DS MOV AX , 0 PUSH AX MOV AX , DATA MOV DS , AX LEA BX , AR R AY MOV CX , COUNT MOV AH, 0 AG: MOV AL, BX CMP AL, O JNZ NEXT INC AH NEXT: INC BX DEC CX JNZ AG MOV NUM, AH RE
25、T MAIN ENDP CODE ENDS END MAIN 编 写程序段, 应 用查询 方式从 键盘输入 字符串( 字符 串的结 束符为 0DH), 并将输入 的字 符 串放在 AR R AY 开 始 的数据段 中, 该 I/O 接口 的数据 端口地址 为 20H, 状态端口 的地 址为 21H, 状态位 定义 在 b5 位, 为 1 时状态 正确 解: LEA BX, ARRAY POLL: IN AL, 21H TEST AL, 00100000B JE POLL AG: IN AL, 20H MOV BX, AL CMP AL, 0DH JE EXIT INC BX JMP AG EXIT : RET