答:(AX)=0012H (BX)=1221H (CX)=0200H
[解析]1)指令 MOV AX, NUM 的功能是将 NUM 单元的字内容 12H
传送给 AX,使得(AX)=0012H;
2)指令 MOV BX, OFFSET NUM 的功能是将 NUM 单元的偏移地址
1221H 传送给 BX,使得(BX)=1221H;
3)指令 MOV CL, BYTE PTR NUM+1 的功能是将 NUM+1(1222H)
单元的字节内容(即 NUM 字单元的高字节)00H 传送给 CL,使得(CL)=00H;
4)指令 MOV CL, TYTE NUM 的功能是将 NUM 字单元的类型字节数
2 传送给 CH,使得(CH)=02H;
5)综合第 4 和第 5 点,可知 CX 寄存器的内容为 0200H。
3.阅读如下程序:
ADRR DB XXH,XXH,……,XXH CMP ADRR[BX],0
NUM EQU $ -ADRR LOOPZ DON
RETT DB? JNZ NEXT
… MOV BL,OFFH
MOV CX,NUM NEXT:MOV RETT,BL
MOV BX,-1 HLT
DON:INC BX
请问:(1)该程序完成的功能是什么?
(2)程序执行后指出 RETT 字节单元中的内容是什么?
答:(1) 在以 ADRR 为起始地址的数组中,查找第一个非 0
数据。
(2) 若找到则将第一个非 0 数据在数组中的偏移量送入 RETT 单元中;
若无非 0 数据,则将 OFFH 送入 RETT 单元中。
[解析]1)程序的前 3 条指令,用于定义数据:
以 ADRR 为起始地址的数组;
NUM 的值为 ADRR 数组的数据个数;
RETT 是一个空的字节单元
2)该程序的主体是一个循环,该循环的主要功能是在数组 ADRR 中第一
个非 0 数据。如果是由于找到,则将第一个非 0 数据在数组中的偏移量送入
RETT 单元中;若没找到非 0 数据,则将 OFFH 送入 RETT 单元中。
4.现有一子程序:
SUB1 PROC PLUS:TEST BL,80H
TEST AL,80H JE EXITO
JE PLUS XCHANGE:XCHG AL,BL
TEST BL,80H EXITO:RET
JNE EXITO SUB1 ENDP
JMP XCHANGE
试回答:(1)子程序的功能是什么?
(2)若调用子程序前 AL=9AH,BL=77H,则返回主程序
时,AL=______,BL=______。
答:(1)子程序的功能是判别 AL 和 BL 中的数是否为异号数,
当为异号时交换,否则不变。
(2) AL=77H, BL=9AH