MOV DS,AX
MOV SI,OFFSET DATA_LIST MOV AX,[SI] MOV BX,[SI] MOV CX,LENGTH
XOR AX,AX XOR BX,BX CLC
AGAIN:CMP AX,[SI] JG NEXT1 MOV AX,[SI] NEXT1:CMP BX,[SI] JNG NEXT2 MOV BX,[SI] NEXT2:JNZ AGAIN MOV MAX,AX MOV MIN,BX CODE ENDS END START
12.给出等值语句如下: ALPHA EQU 100 BETA EQU 25 GAMMA EQU 2
下列表达式的值是多少? (1)ALPHA*100+BETA
(2)ALPHA MOD GAMMA+BETA (3)(ALPHA+2)*BETA-2 (4)(BETA/3)MOD5
(5)(ALPHA+3)*(BETA MOD GAMMA) (6)ALPHA GE GAMMA (7)BETA AND 7 (8)GAMMA OR 3 解答:
(1)=10025;(2)=19;(3)=2548;(4)=3;(5)=103;(6)=0;(7)=01H;(8)=03H。 13.对于下面的数据定义,三条指令分别汇编成什么? TABLEA DW 10 DUP(?) TABLEB DB 10 DUP(?) TABLEC DB ‘1234’ ┊ ┊
MOVE AX,LENGTH TABLEA MOVE BL,LENGTH TABLEB MOVE CL,LENGTH TABLEC 解答:
MOVE AX,10 MOVE BL,10 MOVE CL,1
14.对于下面的数据定义,各条MOVE指令单独执行后,有关寄存器的内容是什么? FLDB DB
TABLEA DW 20DUP(?) TABLEB DB ‘ABCD’
MOVE AX,TYPE FLDB MOVE AX,TYPE TABLEA MOVE CX,LENGTH TABLEA MOVE DX,SIZE TABLEA MOVE CX,LENGTH TABLEB 解答: AX=0001H AX=0002H CX=0014H DX=0028H CX=0001H。
15.指出下列伪操作表达方式的错误,并改正之。 (1)DATA_SEG SEG (2)SEGMENT ‘CODE’
(3)MYDATA SEGMENT/DATA ┆
ENDS (4)MAIN_PROC PROC FAR ┆
END MAIN_PROC MAIN_PROC ENDP 答:(1) DATA-SEG SEGMENT
(2) CODE SEGMENT PARA 'CODE'
(3) /DATA错。定义数据段应在代码段中用ASSUME。ENDS缺少‘MYDATA’。 (4) 多余END,MAIN-PROC应删除。 16.按下面的要求写出程序的框架 (1)数据段的位置从0E000H开始,数据段中定义—个l00字节的数组,其类型属性既是字
又是字节;
(2)堆栈段从小段开始,段组名为STACK,
(3)代码段中指定段寄存器,指定主程序从1000H开始,给有关段寄存器赋值; (4)程序结束。 答: DATA-SEG SEGMENT ORG 0E000H
BYTE-ARRAY LABLE BYTE WORD-ARRAY DW 50 DUP(?) DATA-SEG ENDS
STACK-SEG SEGMENT PARA 'STACK' STACK-SEG ENDS CODE-SEG SEGMENT
ASSUME CS:CODE-SEG,DS:DATA-SEG,SS:STACK-SEG ORG 1000H
START: MOV AX ,DATA-SEG MOV DS ,AX
MOV AX ,STACK-SEG MOV SS ,AX . .
CODE-SEG ENDS END START
17.假设在数据段X_SEG、附加段Y_SEG和堆栈段Z_SEG中分别定义了字变量X,Y和Z。试
编制一完整的程序计算
X?X+Y+Z 答: X-SEG SEGMENT X DW ? X-SEG ENDS Z-SEG SEGMENT Z DW ? Z-SEG EMDS Y-SEG SEGMENT Y DW ? Y-SEG ENDS CODE SEGMENT MAIN PROC FAR
ASSUME ES:Y-SEG,CS:CODE,DS:X-SEG,SS:Z-SEG START PUSH DS SUB AX AX PUSH AX
MOV AX ,Y_SEG MOV ES ,AX MOV AX,Z_SEG MOV SS,AX MOV AX,X_SEG MOV DS,AX MOV AX,DS:X MOV BX,ES:Y ADD AX BX JO OVERFLOW MOV BX ,SS:Z ADD AX,BX JO OVERFLOW MOV DS:X,AX OVERFLOW :RET MAIN ENDP CODE ENDS END START
18.写一个完整的程序放在代码段C_SEG中,要求把数据段D_SEG中的AUGEND和附加段E_SEG中的ADDEND相加,并把结果存放在D_SEG段中的SUM中。其中AUGEND、ADDEND和SUM均为双精度数,AUGEND赋值为99251,ADDEND赋值为-15962。 解答:TITLE SUM D_SEG SEGMENT AUGW LABEL WORD AUGEND DD 99251 SUM DW 2 DUPL (?) D_SEG ENDS E_SEG SEGMENT ADDW LABEL WORD ADDEND DD -15962 E_SEG ENDS C_SEG SEGMENT
ASSUME DS :D_SEG ,ES:E_SEG ,CS:C-SEG MAIN PROC FAR
START :PUSH DS MOVE AX,0 PUSH AX MOV AX,D_SEG MOV DS ,AX MOV AX,E_SEG MOV ES,AX ADDT :MOV AX,AUGW MOV BX,AUGW+2
ADD AX, ES : ADDW ADC BX, ES: ADDW+2 MOV SUM ,AX MOV SUM+2,BX RET MAIN ENDP C_SEG ENDS
END START
19.读下面程序段,请问:在什么情况下,本段程序的执行结果是AH=0? BEGIN: IN AL,5FH TEST AL,80H JZ BRCHl MOV AH,0 JMP STOP BRCHl: MOV AH,0FFH STOP: HLT
解答:AL中的最高位为1时。 20.读程序:
START: IN AL,20H MOV BL,AL IN AL,30H MOV CL,AL MOV AX,0 ADLOP: ADD AL,BL ADC AH,0 DEC CL JNZ ADLOP HLT 请问: (1)本程序实现什么功能? (2)结果在哪里?
解答:完成20H*30H,结果在AX中。
21.请编一程序段完成AX*l0的任务(要求不准用乘法指令做)。 解答: MOV BX,AX MOV CL 2 SHL AX, CL ADD AX,BX SHL AX ,1 22.编程序使:
(1)AX寄存器低4位清零。 (2)BX寄存器低4位置“1”。 (3)CX寄存器低4位变反。
(4)用TEST指令测试DL寄存器位3、位6是否同时为0,若是,将0送DL;否则l送DH。
相关推荐: