EEH 00H - 01H 02H 01H 02H - 00H - 01H 02H 01H 02H -
BYTE_VAR 00H 00H 01H 00H 02H 00H ┇ ┇ ┇ - - FBH FFH 00H 59H 42H 45H 54H 56H 02H
WORD_VAR
将上面 内容再
重复4次
答:DW 5150H
DB 50H, 51H DB ?PQ‘ DW ?QP‘ ORG 5150H DW $
4.7 答:DATASG SEGMENT FLD1B DB ?personal computer‘ FLD2B DB 32 FLD3B DB 20H
FLD4B DB 01011001B FLD5B DB ?32654‘ FLD6B DB 10 DUP (0) FLD7B DB ?PART1‘, 20 DB ?PART2‘, 50 DB ?PART3‘, 14
FLD1W DW 0FFF0H FLD2W DW 01011001B FLD3W DW FLD7B FLD4W DW 5, 6, 7, 8, 9 FLD5W DW 5 DUP (0)
FLD6W DW FLD1W-FLD1B DATASG ENDS
4.8 PLENTH=22=16H,它表示变量PARTNO、PNAME、COUNT总共占用的存储单元数(字节数)。
4.9答:L=6。
4.10 (1) MOV AX, OFFSET LNAME
(2) MOV SI, WORD PTR CODE_LIST
(3) CODE_LENGTH EQU $ - CODE_LIST ;此语句必须放在CODE_LIST语句之后 4.11 DATA_SEG SEGMENT NUM DB 5
DATA_LIST DW -1, 0, 2, 5, 4, 5 DUP (?) MAX DW ? MIN DW ?
DATA_SEG ENDS
;---------------------------------------------------------------- CODE_SEG SEGMENT MAIN PROC FAR
ASSUME CS: CODE_SEG, DS: DATA_SEG START: PUSH DS ;设置返回DOS SUB AX, AX PUSH AX
MOV AX, DATA_SEG ;给DS赋值 MOV DS, AX ;
MOV CX, 4 ;程序段开始 LEA BX, DATA_LIST MOV AX, [BX] MOV MAX, AX MOV MIN, AX
ROUT1: ADD BX, 2 MOV AX, [BX] CMP AX, MAX JNGE ROUT2 MOV MAX, AX
ROUT2: CMP AX, MIN JNLE ROUT3 MOV MIN, AX
ROUT3: LOOP ROUT1 ;程序段结束 RET
MAIN ENDP
CODE_SEG ENDS
;---------------------------------------------------------------- END START
4.12 (1) ALPHA * 100 + BETA ;=2729H (2) ALPHA MOD GAMMA + BETA ;=19H
(3) (ALPHA +2) * BETA – 2 ;=9F4H (4) (BETA / 3) MOD 5 ;=3H
(5) (ALPHA +3) * (BETA MOD GAMMA) ;=67H (6) ALPHA GE GAMMA ;=0FFFFH (7) BETA AND 7 ;=01H (8) GAMMA OR 3 ;=03H 4.13 TABLEA DW 10 DUP (?)
TABLEB DB 10 DUP (?) TABLEC DB ?1234‘ ┇
MOV AX, LENGTH TABLEA ;汇编成MOV AX, 000AH MOV BL, LENGTH TABLEB ;汇编成MOV BL, 000AH MOV CL, LENGTH TABLEC ;汇编成MOV CL, 0001H 4.14 (1) MOV AX, TYPE FLDB ;(AX)=0001H (2) MOV AX, TYPE TABLEA ;(AX)=0002H (3) MOV CX, LENGTH TABLEA ;(CX)=0014H (4) MOV DX, SIZE TABLEA ;(DX)=0028H (5) MOV CX, LENGTH TABLEB ;(CX)=0001H
4.15 (1) DATA_SEG SEG ;DATA_SEG SEGMENT(伪操作错)
(2) SEGMENT ?CODE‘ ;SEGNAME SEGMENT ?CODE‘(缺少段名字) (3) MYDATA SEGMENT/DATA ;MYDATA SEGMENT
┇
ENDS ;MYDATA ENDS(缺少段名字)
(4) MAIN_PROC PROC FAR ;删除END MAIN_PROC也可以
┇
END MAIN_PROC ;MAIN_PROC ENDP ;上下两句交换位置
MAIN_PROC ENDP ; END MAIN_PROC 4.16 程序的框架如下:
DATA_SEG SEGMENT AT 0E000H ARRAY_B LABEL BYTE ARRAY_W DW 50 DUP (?)
DATA_SEG ENDS ;以上定义数据段
;---------------------------------------------------------------- STACK_SEG SEGMENT PARA STACK ?STACK‘ DW 100H DUP (?) TOS LABEL WORD
STACK_SEG ENDS ;以上定义堆栈段
;---------------------------------------------------------------- CODE_SEG SEGMENT MAIN PROC FAR
ASSUME CS: CODE_SEG, DS: DATA_SEG, SS: STACK_SEG ORG 1000H
START: MOV AX, STACK_SEG MOV SS, AX ;给SS赋值
MOV SP, OFFSET TOS ;给SP赋值 PUSH DS ;设置返回DOS SUB AX, AX PUSH AX
MOV AX, DATA_SEG
MOV DS, AX ;给DS赋值 ┇ ;程序段部分 RET
MAIN ENDP
CODE_SEG ENDS ;以上定义代码段
;---------------------------------------------------------------- END START
4.17答:程序如下: D_SEG SEGMENT AUGW LABEL WORD AUGEND DD 99251 SUM DD ?
D_SEG ENDS ;以上定义数据段
;---------------------------------------------------------------- E_SEG SEGMENT ADDW LABEL WORD ADDEND DD -15962
E_SEG ENDS ;以上定义附加段
;---------------------------------------------------------------- C_SEG SEGMENT MAIN PROC FAR
ASSUME CS: C_SEG, DS: D_SEG, ES: E_SEG START: PUSH DS ;设置返回DOS SUB AX, AX PUSH AX
MOV AX, D_SEG
MOV DS, AX ;给DS赋值 MOV AX, E_SEG
MOV ES, AX ;给ES赋值 ;
MOV AX, AUGW ;以下6条指令进行加法计算 MOV BX, AUGW+2 ADD AX, ES: ADDW
ADC BX, ES: ADDW+2 ;不考虑有符号数溢出 MOV WORD PTR SUM, AX MOV WORD PTR [SUM+2], BX RET
MAIN ENDP
C_SEG ENDS ;以上定义代码段
;---------------------------------------------------------------- END START
4.18 答:表示程序结束的微操作是指示汇编程序MASM结束汇编的标志,在源程序中用
END表示;结束程序执行的语句是结束程序运行而返回操作系统的指令,在源程序中有多种表示方法,比如INT 20H或MOV AX, 4C00H INT 21H以及RET等。 4.19 (1) MOV AL,BVAL ;不需要 (2) MOV DL,[BX] ;不需要 (3) SUB [BX],2 ;需要,如SUB BYTE PTR [BX],2
(4) MOV CL,WVAL ;需要,如MOV CL,BYTE PTR WVAL (5) ADD AL,BVAL+1 ;不需要
第五章
5.1答:程序段如下:
BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用 INT 21H
CMP AL, ?a‘ ;输入字符
CMP AL, ?z‘ ;输入字符>?z‘吗? JA STOP
SUB AL, 20H ;转换为大写字母,用AND AL, 1101 1111B也可 MOV DL, AL ;显示一个字符的DOS调用 MOV AH, 2 INT 21H JMP BEGIN STOP: RET
5.2答:程序段如下:
BEGIN: MOV AH, 1 ;从键盘输入一个字符的DOS调用