MOV AX,LENGTH VARW + LENGTH VARD ;AX=0002H MOV AX,LENGTH BUFF + SIZE VARW ;AX=000CH MOV AX,TYPE BEGIN ;AX=FFFFH MOV AX,OFFSET BEGIN ;AX=0119H
题3.8 设如下两条指令中的符号ABCD是变量名,请说明这两条指令的异同。 MOV AX,OFFSET ABCD LEA AX,ABCD
答: 两条指令都是将ABCD的偏移地址放入AX寄存器中;
不同之处是OFFSET只能取得用数据定义伪指令的变量的有效地址,而不能取得一般操作
数的有效地址;
题3.9 请指出如下指令的不明确之处,并使其明确: MOV ES:[BP],5 ADD CS:[1000H],10H DEC SS:[BX-8]
JMP CS:[SI+1000H] MUL [BX+DI+2] DIV [BP-4]
答: MOV ES:[BP],5 ;未指定存储单元属性 MOV WORD PTR ES:[BP],5 ADD CS:[1000H],10H ;同上 ADD WORD PTR CS:[1000H],10H DEC SS:[BX-8] ;同上 DEC WORD PTR SS:[BX-8] JMP CS:[SI+1000H] ;无法确定段间还是段内转移 JMP WORD PTR CS:[SI+1000H]
MUL [BX+DI+2] ;无法确定是8位乘法还是16位乘法 MUL WORD PTR [BX+DI+2]
DIV [BP-4] ;同上 DIV WORD PTR [BP-4]
题3.10 设在某个程序中有如下片段,请改正其中有错误的指令语句: VARW DW 1234H,5678H VARB DB 3,4 VARD DD 12345678H ......
MOV AX,VARB MOV VARD,BX MOV VARD+2,ES MOV CL,VARW+3 LES DI,VARW
答: MOV AX,VARB ;VARB是8bit量,应该修改AX到AL or AH MOV VARD,BX ;VARD是32bit量,要分两次传
MOV VARD+2,ES ;同上
MOV CL,VARW+3 ;同上,CL改为CX
LES DI,VARW ;VARW非32位量,应改为VARD
题3.11 请举例说明伪指令ASSUME的作用。
答: ASSUME的作用是声明现在开始CS寄存器对应于哪个段,DS对应于哪个段,SS和ES
分别对应哪个段,可以相同也可以不同; 如:
ASSUME CS:CSEG,DS:DSEG,SS:SSEG,ES:ESEG 可以根据需要重新建立对应关系;
题3.12 设在某个程序片段中有如下语句,请说明各符号的属性: SYMB1 LABEL BYTE SYMB2 EQU THIS BYTE SYMB3 DW ?
SYMB4 EQU BYTE PTR SYMB3
答: SYMB1:BYTE SYMB2:BYTE SYMB3:WORD
SYMB4:BYTE
题3.13 为什么说汇编语言中的等价语句EQU可理解为简单的宏定义?请举例说明。 答: EQU可以用符号定义常数,表达式,指令助记符,字符串等; 而宏定义是指定一个宏指令名,宏指令可表示相对应的程序片段。 如:
HELLO EQU \ 与:
HELLO MACRO 'How are you !' ENDM 一致;
题3.14 设在某个程序片段中有如下语句,请说明各符号所表示的值: SYMB1 = 10 SYMB2 = SYMB1*2
SYMB1 = SYMB1 + SYMB2 + 4 SYMB3 EQU SYMB1
答: SYMB1 = 22H SYMB2 = 14H SYMB3 = 22H
题3.15 请改写3.3.3的程序T3-1.ASM,使其只有一个段。 答: ;程序名:T3-1.ASM
;功能 :显示信息“HELLO\ cseg segment assume cs:cseg
mess db 'HELLO',0dh,0ah,'$' start: mov ax,cseg mov ds,ax mov dx,offset mess mov ah,9 int 21h mov ah,4ch int 21h cseg ends end start
题3.16 请说明指令”JMP $+2“指令的机器码中的地址差值是多少? 答: 2H
题3.17 源程序是否一定要以END语句结束?程序是否一定从代码段的偏移0开始执行? 如果不是,那么如何指定?
答: 源程序可以不以END语句结束,不过END之后的内容汇编程序将忽略。
程序不一定要从代码的偏移0开始执行,一个比较简单的方法是利用END语句, 如END XXX,程序将从XXX标号处开始执行;
题3.18 利用查表的方法实现代码转换有何特点?利用查表的方法求函数值有何特点? 答: 利用查表的方法实现代码转换的特点是:
1、转换代码间不需要直接的算术或逻辑关系,只需要安排好表的组织即可; 2、对于部分代码,其转换效率比较高,主要时间用在寻址上;
利用查表的方法求函数值的特点是:
1、对于大部分的数学函数值的求值,直接计算困难较大,采用查表法可祢补 不足;
2、程序比较简单;
3、能够得到十进制或者十六进制格式的高精度函数值。 4、函数值必须事先计算好; 5、精度无法由程序控制;
题3.19 利用地址表实现多向分支有何特点?请举例说明。 答: 利用地址表实现多向分支的特点有:
1、对于实现5路以上的多向分支,使用地址表既方便又高效; 2、对于如何确定地址的位置,需要采用不同的方法实现; 例子看书。
题3.20 请举例说明如何避免条件转移超出转移范围。
答: 如果出现条件转移超出了范围,则可以利用无条件转移指令帮助跳转; 如:
cmp ax,'A' jb out_program
如果超出范围: cmp ax,'A' jb out_com ... out_com:
jmp far ptr out_program
题3.21 请写一个程序片段统计寄存器AX中置1的个数。 答: count db ?,?,0dh,0ah,'$' ... ...
call countAX
cmp bl,9 ja sub10 jmp go sub10:
sub bl,10
mov count,31h go:
add bl,30h mov count+1,bl mov dx,offset count mov ah,9 int 21h mov ah,4ch
int 21h
;============================== ;入口:AX
;出口:BL=AX中1的个数 countAX proc mov cx,16 mov bl,0 count1: shl ax,1 jnc ADDAX1 add bl,1 ADDAX1:
相关推荐: