ADC DX,BX ;8倍+2倍=10倍 17、请编写程序段实现如图3.33所示功能。
MOV SI,BX LDSBX,[SI] 18、设已有定义
STR DB“Sdfikjwsmfw893040pYUIUKLHGUkjdshf8” N EQU $ - STR1
试编写实现在STR中查找是否存在非‘A’的功能程序段。即表示STR串中大部分是‘A’,若其中存在不是‘A’的字符则查找成功,若STR全部为‘A’则不成功。
19、程序理解执行。
(1)MOV AH,一l ;AH=FFH MOV AL,180 ;AL=B4H MOV BL,15 ;BL=0FH
IDⅣ BL ;AX/BL即:-76/15,商-5,余数-l 程序段执行后,AX=0FFFBH。
说明:关键是要知道谁除以谁,特别注意是有符号除还是无符号除。 (2)MOV AL,0CH ;AL=0CH OR AL,AL ;AL=0CH,CF=0 SBB AL,0F0H ;AL=lCH NEG AL ;AL=E4H,CF=1 ADC AL,0D4H ;AL=B9H
TEST AL,35H ;AL=B9H,CF=0 程序段执行后,CF= 0 ,AL=B9H。
说明:第(1)、(2)小题只要理解每条指令功能及对标志位的影响,逐步进行即可完成。
(3)MOV AL,08H
MOV AH,一l ;AX=FF08H MOV BX,0F8H ;BX=00F8H CMP AX,BX
程序段执行后SF⊕OF=1 ,CF= 0 。
(4)MOV AX,’中’ ;AX的二进制高位为1,即落在负数范围 MOV BX,’AB’ ;BX的二进制高位为0,即落在正数范围 CMP AX,BX
程序段执行后SF⊕OF=1 ,CF= 0 。
说明:第(3)(4)小题实质是考查有符号数和无符号数大小的比较。 (5)MOV AX,’58’;AX=3538H
AND AX,0F0FH ;AX=0508H AAD ;AX=58=003AH
程序段执行后AX= 003A H,即58。
程序段的功能是:将两位非压缩BCD码转化为其对应的十六进制数。 说明:可用AAD指令实现将十位和个位数值拼装还原为0~99的十六进制
9 / 29
数。反之将0~99的数值分离成十位和个位可用AAM指令实现,教材《汇编语言、微机原理及接口技术(第2版)》例5.10和例5.13中均有应用。 20、程序语句填空。
(1)下列是完成1~20之间的奇数累加和存于AL中的程序段: XOR AL,AL
MOV CX,10;循环次数 MOV BL,1 AGAIN:ADD AL.BL
ADD BL,2;步长,参数改变 LOOP AGAIN
(2)下列是在串长为N的串STR中查找是否有‘M’字符的程序段: MOV DI,SEG STR MOV ES,DI LEA Dl,STR CLD
MOV CX,N MOV AL,7M7
REPNE SCASB ;串查找核心指令 JZ FOUND ;转到找到分支
(3)下列是完成1位十六进制数X显示的程序段: MOV DL,X AND DL,0FH
ADD DL,30H ;或OR DL,30H CMP AL,’9’ JBE NEXT ADD DL,7 NEXT:MOV AH,02H INT 21H
(4)将DH中的二进制数看成压缩BCD码并送出显示的程序段如下: MOV DL,DH
MOV CL,4 ;获取十位 SHR DL,CL ADD DL,30H
MOV AH,2;2号功能调用显示十位 INT 21H
MOV DL,DH
AND DL,0FH ;获取个位 OR DL,30H INT 21H 21、图略
22、假定AX和BX中的内容为带符号数,CX和DX的内容为无符号数,请用比较指令和转移指令实现以下条件转移:
(1)若DX的内容超过CX的内容,则转到Ll。 答:CMP DX,CX
10 / 29
JA Ll
(2)若BX的内容大于AX的内容,则转到L2。 答:CMP BX,AX JG L2
(3)若DX的内容未超过CX的内容,则转到L3。 答:CMP DX,CX JNA L3
(4)判断BX与AX相比较是否产生溢出,若溢出则转到L4。 答:CMP BX,AX JO L4
(5)若BX的内容小于等于AX的内容,则转到L5。 答:CMP BX,AX JLE L5
(6)若DX的内容小于等于CX的内容,则转到L6。 答:CMP DX,CX JBE L6
23、假设BX=0A69H,VALUE变量中存放的内容为1927H,写出下列各条指令执行后的BX的寄存器中和CF、ZF、SF与OF的值:
(1)XOR BX,VALUE (2)AND BX,VALUE (3)OR BX,VALUE (4)SUB BX,VALUE (5)CMP BX,VALUE (6)TEST BX,VALUE
答:BX CF ZF SF OF (1)134EH 0 0 0 0 (2)0821H 0 0 0 0 (3)186FH 0 0 0 0 (4)Fl42H 1 0 1 0 (5)0A69H 1 0 1 0 (6)0A69H 0 0 0 0
第4章MASM汇编语言
1、名词解释
指令伪指令宏指令汇编语句汇编语言汇编源程序汇编程序汇编连接程序连接 答:指令:是CPU可以理解并执行的操作命令。
伪指令:是用于为汇编程序编译时理解程序框架、分配空间(数据定义)等的汇编语句。
宏指令:实质上就是有多条指令打包而成的一组指令的集合。
汇编指令:一行只能写一条汇编语句,一条汇编只能写在一行内。
11 / 29
汇编语言:语句中的表达式是在汇编过程中完成计算的,即翻译之后的机器语言程序中
是不包含表达式的。
汇编源程序:主要有四步,录入源程序、汇编、连接、运行、调试运行。(不准确)
汇编程序:编写汇编程序实质上就是在记住程序框架的基础上填写两空,即数据定义部
分和功能程序部分。
汇编:格式:MASM [[盘符][路径]程序基本名[.ASM]] 建议程序基本名不要省略.
连接程序:编译器和汇编程序都经常依赖于连接程序,它将分别在不同的目标文件中编译或汇编的代码收集到一个可直接执行的文件中。连接程序还连接目标程序和用于标准库函数的代码,以及连接目标程序和由计算机的操作系统提供的资源
连接:LINK [[盘符][路径]程序基本名[.OBJ]]建议程序基本名不要省略。 2、写出三种汇编语句的基本格式并进行说明。
教材P50
3、由用户取名的名字项有哪些?名字项的取名规则如何?
教材P50
4、请计算下列表达式的值。
答(1)3+6/3*4 mod 3 ;注意运算优先级,值为5
(2)(MGTN)ANDNORMLENANDM ;M,N中的较小值
(3)5 GT 3 (作为8位和16位二进制数各为多少) ;0FFH和0FFFFH (4)20AND 77(作为8位和16位二进制数各为多少);04H和0004H (5)5 AND-1 :5 (6)5 OR-1 ;-l
(7)NOT 5 (作为8位和16位二进制数各为多少) ;0FAH和0FFFAH,均为-6
(8)设有定义如下:
A DB 2,4,6,8 B DW 2,4,6,8
C DW 5 DUP(2,4,6,8)
则TYPE A、TYPE B和TYPE C分别为多少? ;1,2,2
LENGTHA、LENGTHB和LENGTHC分别为多少? ;1,1,5 SIZEA、SIZEB和SIZEC分别为多少? ;1,2,10
5、汇编语言中的数据类型与其他高级语言的数据类型相比较有哪些特点?
6、设有如下定义:
ADB 1101B,34,56Q,78H,4DUP (?),'ABCD’
请画出内存分配示意图并将其改成内存中存放次序相同的DW及DD的等价定义语句。
答:图自己画。
A DW 220DH,782EH,2DUP(?),4241H,4443H B DD,782E220DH,?,44434241H
12 / 29