PLENTH EQU $-PARTNO 问PLENTH的值为多少? 它表示什么意义? 【解】:PLENTH的值为22,它表示数据的个数。 4.6有符号定义语句如下:
BUFF DB 1,2,3,‘123’ EBUFF DB 0
L EQU EBUFF-BUFF 问L的值是多少? 【解】:PLENTH的值为6。
4.7 假设程序中的数据定义如下: LNAME DB 30 DUP(?) ADDRESS DB 30 DUP(?) CITY DB 15 DUP(?) CODE-LIST DB 1,7,8,3,2
⑴ 用一条MOV指令将LNAME的偏移地址放入AX。
⑵ 用一条指令将CODE_LIST的头两个字节的内容放入SI。
⑶ 写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。 【解】: ⑴ 用一条MOV指令将LNAME的偏移地址放入AX。 MOV AX, OFFSET LANME
⑵ 用一条指令将CODE_LIST的头两个字节的内容放入SI。
MOV SI, WORD PTR CODE_LSIT
⑶ 写一条伪操作使CODE_LENGHT的值等于CODE_LIST域的实际长度。
CODE_LENGHT EQU CITY-CODE_LIST
4.8试写出一个完整的数据段DATA_SEG,它把整数5赋予一个字节,并把整数-1,0,2,5和4放在10字数组DATA_LIST的头5个单元中。然后,写出完整的代码段,其功能为:把DATA_LIST中头5个数中的最大值和最小值分别存入MAX和MIN单元中。 【解】:参考程序如下:
DATA_SEG SEGMENT DB1 DB 5
DATA_LIST DB -1, 0, 2, 5, 4, 5 DUP(?) COUNT DB 5 MAX DB ? MIN DB ? DATA_SEG ENDS CODE_SEG SEGMENT
ASSUME CS:CODE_SEG, DS:DATA_SEG START PROC FAR PUSH DS MOV AX, 0 PUSH AX
MOV AX, DATA_SEG MOV DS, AX
LEA BX, DATA_LIST MOV CX, COUNT-1
MOV AL, [BX] MOV AH, [BX+1] LOOP1: INC BX CMP AH, AL JAE LOOP1 XCHG AH, AL LOOP2 INC BX
CMP AH, [BX] JAE LIS
XCHG AH, [BX] JMP LOP2
LIS: CMP AL , [BX] JBE LOP2
XCHG AL, [BX] LOOP2
MOV MAX, AH MOV MIN, AL RET START ENDP CODE_SEG ENDS
END START 4.9给出等值语句如下:
ALPHA EQU 100 BETA EQU 25 GAMMA EQU 2 下列表达式的值是多少?
⑴ ALPHA*100+BETA ⑵ ALPHA MOD GAMMA+BETA ⑶ (ALPHA+2)*BETA-2 ⑷ (BETA/3) MOD 5
⑸ (ALPHA+3)*(BETA MOD GAMMA) ⑹ ALPHA GE GAMMA ⑺ BETA AND 7 ⑻ GAMMA OR 3 【解】: ⑴ ALPHA*100+BETA 100×10025=10025 ⑵ ALPHA MOD GAMMA+BETA 100/(25+2)=19
⑶ (ALPHA+2)*BETA-2 (100+2)*25=2548 ⑷ (BETA/3) MOD 5 (25/3) MOD 5=3
⑸ (ALPHA+3)*(BETA MOD GAMMA) (100+3)*(25 MOD 2)=103 ⑹ ALPHA GE GAMMA 100 GZ GAMMA=0FFFFH ⑺ BETA AND 7 25 AND 7=1 ⑻ GAMMA OR 3 2 OR 3=3
4.10对于下面的数据定义,三条MOV指令分别汇编成什么?(可用立即数方式表示)
TABLEA DW 10 DUP(?) TABLEB DB 10 DUP(?) TABLEC DB ’1234’ ┇ MOV AX,LENGTH TABLEA
MOV BL,LENGTH TABLEB MOV CL,LENGTH TABLEC 【解】: MOV AX,LENGTH TABLEA MOV AX, OOOAH
MOV BL,LENGTH TABLEB MOV BL, 0AH MOV CL,LENGTH TABLEC MOV CL, O1H
4.11对于下面的数据定义,各条MOV指令单独执行后,有关寄存器的内容是什么?
FLDB DB ? TABLEA DW 20 DUP(?) TABLEB DB ‘ABCD’ ⑴ MOV AX,TYPE FLDB ⑵ MOV AX,TYPE
TABLEA
⑶ MOV CX,LENGTH TABLEA ⑷ MOV DX,SIZE TABLEA ⑸ MOV CX,LENGTH TABLEB (1) MOV AX,TYPE FLDB 【解】: (AX)= 1 (2) MOV AX,TYPE TABLEA (AX)= 2 (3) MOV CX,LENGTH TABLEA (CX)= 20 (4) MOV DX,SIZE TABLEA (DX)= 40 (5) MOV CX,LENGTH TABLEB (CX)= 1
4.12编写在屏幕上显示字符串‘THIS IS TEXT DISPLAY PROGRAM.’的程序。 【解】:分析:只需将欲显示字符串的ASCII码存放到字节变量数据区(字节变量数据区一定要以‘$’结束),用9号功能调用即可显示该字符串。)参考程序如下: SSEG SEGMENT STACK ‘STACK’ DB 32 DUP(?) SSEG ENDS DSEG SEGMENT
STRB DB ‘THIS IS TEXT DISPLAY PROGRAM $’ DSEG EDNS CSEG SEGMENT START PROC FAR START EDNP FAR
ASSUME CS:CSEG, SS:SSEG, DS:DSEG PUSH DS MOV AX, 0 PUSH AX
MOV AX, DESG MOV DS, AX
MOV DX, OFFSET STRB MOV AH, 9 INT 21H RET CSEG ENDS
END START
4.13 编写程序,接收从键盘输入的10个十进制数字,输入中遇见回车符则停止输入,各个数经过BCD码处理,以十六进制数显示在屏幕上。