MUL DATAY ;結果的高十六位保存在DX裏,低十六位保存在AX裏 (5) MOV AX,DATAX MOV DX,[DATAX+2]
MUL DWORD DATAY ;結果的高三十二位保存在EDX裏,低三十二位保存在EAX裏
(6)MOV AX,DATAX
DIV 17H ;結果商保存在AL中,余數在AH中 (7) MOV AX,DATAX CDW
DIV DATAY 21. NEG DX NEG AX SBB DX,0 22.
MOV AX,A ;把雙字長數的低字放到AX中 MOV DX,[A+2] ;把雙字長數的高字放到DX中 TEST DX,8000H ;測試雙字長數的符號 JZ RIGHT ;如果是非負數,則直接保存 NEG DX ;如果是負數,則求補 NEG AX
SBB DX,0 RIGHT: MOV B ,AX MOV [B+2],DX
23.每條指令單獨執行完後的結果依次為:
(1) 9AH (2)61H (3)0FBH (4)1CH (5)0 (6)0E3H 24.執行指令序列後,BX的內容為:0DAH 25.
(1)把53D乘以2的程序:
MOV AX,35H ;53D=35H SHL AX ,1
(2)把53除以2 的程序: MOV AX,35H SHR AX,1
26.這段程序完成的功能是:把DX:AX中的雙字數據左移4位(相當於乘以16D) 27.各條指令單獨執行後,DX的值依次為:
(1)5CH(2)17H(3)05C8H(4)72H(5)2017H(6)0CDH(7)0172H(8)05CCH(9)0DCH
28. 該程序段執行完後,BX寄存器的內容是:C02DH
29.(1)从左到右把CONMAE中的字符串伟送到PRLINE的程序实现:
LEA SI,CONAME ;把CONAME中第一个字节的偏移地址送到SI中 LEA DI,PRLINE ;把PRLINE中第一个字节 的偏移地址送到DI中 MOV CX,20 ;把重复次数放到CX里
CLD ;让SI DI从低地址指向高地址(即从左到右传送) REP MOVSB ;传送
(2)从右到左把CONMAE中的字符串传送到PRLINE中的程序实现: LEA SI ,CONAME LEA DI,PRLINE MOV CX,20
STD ;和上面唯一不同的就是这次是从右到左,所以要从高地址批向低地址 REP MOVSB
(3)把CONAME中的第三和第四個字節裝入AX的程序實現: LEA SI ,[CONAME+3] LODSW
(4)把AX寄存器的內容存入從PRLINE+5開始的字節中的程序實現: LEA DI ,[PRLINE+5] STOSW
(5)檢查CONAME字符串中有無空格字符,如有把它偉送給BH寄存器的程序實現: LEA DI,CONAME ;把CONAME中第一個字符偏移地址放入DI中 MOV CX,20 ;把重複次數放到CX中
MOV AL,20H ;把空格符的ASCII值放入AL中 CLD ;從低到高 REPNE SCASB ;比較
MOV BH,[DI-1]R ;把檢查到的空格符送到BH中 30.
MOV CX,12H ;把重複次數放到CX中。這裏用十六進制表示 MOV SI,0 ;初始化SI
MOV AX,26H ;把&字符的ASCII值放入AX CHECK: CMP AX,STRING[SI] ;依次查找 INC SI
LOOPNE CHECK ;找到了就退出
MOV AX,20H ;把空格符的ASCII值勤放入AX中 MOV STRING[SI-1],AX ;用空格符代替& 31.(1)用空格符清除PRINT_LINE域的程序实现: MOV AL,20H
LEA DI ,PRINT_LINE MOV CX,132 CLD
REP STOSB
(2)在STUDENT_ADDR中查找 第一个“_”的程序实现: MOV AX,2DH ;把“—”的ASCII值放入AX MOV SI,0 ;初始化SI
MOV CX,9 ;把重複次數放入CX中
;依次檢查STUDENT-ADDR中的字符是否為 “_”,找到第一个停下来 CHECK:CMP AX ,STUDENT_ADDR[SI] ; INC SI
LOOPNZ CHECK
(3)在STUDENT_ADDR中查找最后一个 “_” 的程序实现: ;和第二題不同的就是這次是從右到左查詢,所以SI的初始化為9
MOV AX,2DH MOV SI ,9 MOV CX,9
CHECK :CMP AX,STUDENT_ADDR[SI] DEC SI
LOOPNZ CHECK (4)程序實現:
MOV AL,2OH ;把空格符的ASCII值放入AL中
LEA DI ,STUDENT_NAME ;把STUDENT_NAME中第一个字符偏移地址放到DI中 MOV CX,30 ;把重复次数放到CX中 CLD ;让DI从低位移到高位
REPZ SCASB ;如果有不是空格符的,就退出 JZ STORE ;如果全是空格符,就转到STORE中 ;用*代替空格
STORE:MOV AL 2AH MOV CX ,30
STD ;注意,这里是把前面从低到高移动的DI再从高到低移上去 REP STOSB (5)程序实现:
;把STUDENT_NAME 移到PRINT_LINE的前30个字节中 LEA SI, STUDENT_NAME LEA DI,PRINT_LINE MOV CX ,30 CLD
REP MOVSB
;把STUDENT_ADDR移到PRINT_LINE的后9个字节中 LEA SI ,[STUDENT_ADDR+9] LEA DI,[PRINT_LINE+132] MOV CX,9 STD
REP MOVSB 32.程序实现: …
LEA SI,OLDS LEA DI,NEWS MOV CX,5 REPZ CMPSB JNZ NEW_LESS … 33.
(1)CMP DX,CX JA EXCEED (2)CMP BX,AX JG EXCEED
(3)CMP CX,0 JZ ZERO
(4)CMP BX,AX JO OVERFLOW (5)CMP BX,AX JLE EQ_SMA (6) CMP DX,CX JBE EQ_CX 34. (1)跳转到:L1 (2)跳转到L1 (3)跳转到L2 (4)跳转到L5 (5)跳转到L5 35.
(1)可以引起转移到L1的指令有: NB ,BE ,NL ,LE (2)可以引起转移到L1的指令有: 同上
(3)可以引起转移到L1的指令有: B,BE ,L , LE
(4)可以引起转移到L1的指令有: NB ,NBE ,NL ,NLE (5)可以引起转移到L1的指令有: 同上
(6)可以引起转移 到L1的指令有: 同(3) (7)可以引起转移 到L1的指令有: 同上 37.
MOV AL,STAUS[SI] ;把要测试的字节放到AL中
AND AL,2AH ;把第一,三,五位为一其他位为0的数--2AH,与这个字节比较,结果放到AL中
JZ ROUTINE_4 ;如果结果为0,则三位都为0 XOR AL,2AH ; 前面相与的结果再与2AH异或 JZ ROUTINE_1 ;如果结果为0,则三位都为1 BSF BL,AL ; BSR BL ,AL CMP BL,CL
;如果向前和向后测试后,第一个1 的位置相同,说明只有一个1,则异或运算前有AL中有两个1
JE ROUTINE_2 ROUTINE_1
38.(1)当括号内是:LOOP时,循环四次,程序结束后 (AX)=05 (BX)= 16 (CX)=0 (DX)=0
(2) 当括号内是: LOOPE 时,不循环,程序结束后 (AX)=02 (BX)=04 (CX)=03 (DX)=02
(3)当括号内是:LOOPNE 时:循环三次,程序结束后 (AX)=04 (BX)=11 (CX)=01 (DX)=0 39.P101
40.(1)0000 3100H (2)5100H (3)7100H
41.(1)目的地址:2004H 内容依次为: 56H F4H 23H 98H