
微机接口答案.doc
47页第三章1. 分别说明以下指令的源操作数和目的操作数各采用什么寻址方式〔1〕MOV A*,2408H 〔2〕MOV CL,0FFH 〔3〕MOV B*,[SI]〔4〕MOV 5[B*],BL 〔5〕MOV [BP+100H],A* 〔6〕MOV [B*+DI],’$’〔7〕MOV D*,ES:[B*+SI] 〔8〕MOV VAL[BP+DI],D*〔9〕IN AL,05H 〔10〕MOV DS,A*答:〔1〕立即数,存放器〔2〕立即数,存放器〔3〕存放器间接,存放器〔4〕存放器,存放器相对〔5〕存放器,存放器相对〔6〕立即数,基址变址〔7〕基址变址,存放器〔8〕存放器,相对基址变址〔9〕直接端口寻址,存放器〔10〕存放器,存放器2. :DS=1000H,B*=0200H,SI=02H,存10200H~10205H 单元的容分别为10H,2AH,3CH,46H,59H,6BH以下每条指令执行完后A* 存放器的容各是什么?〔1〕MOV A*,0200H 〔2〕MOV A*,[200H] 〔3〕MOV A*,B*〔4〕MOV A*,3[B*] 〔5〕MOV A*,[B*+SI] 〔6〕MOV A*,2[B*+SI]答:〔1〕0200H 〔2〕2A10H 〔3〕0200H〔4〕5946H 〔5〕463CH 〔6〕6B59H3. 设DS=1000H,ES=2000H,SS=3500H,SI=00A0H,DI=0024H,B*=0100H,BP=0200H,数据段中变量名为VAL 的偏移地址值为0030H,试说明以下源操作数字段的寻址方式是什么?物理地址值是多少?〔1〕MOV A*,[100H] 〔2〕MOV A*,VAL 〔3〕MOV A*,[B*]〔4〕MOV A*,ES:[B*] 〔5〕MOV A*,[SI] 〔6〕MOV A*,[B*+10H]〔7〕MOV A*,[BP] 〔8〕MOV A*,VAL[BP][SI]〔9〕MOV A*,VAL[B*][DI] 〔10〕MOV A*,[BP][DI]答:〔1〕直接,10100H 〔2〕直接,10030H 〔3〕存放器间接,10100H〔4〕存放器间接,20100H 〔5〕存放器间接,100A0H 〔6〕存放器相对,10110H〔7〕存放器间接,35200H 〔8〕相对基址变址,352D0H〔9〕相对基址变址,10154H 〔10〕基址变址,35224H4. 写出以下指令的机器码〔1〕MOV AL,CL 〔2〕MOV D*,C* 〔3〕MOV [B*+100H],3150H答:〔1〕10001010 11000001B〔2〕10001011 11010001B〔3〕11000111 10000111 00000000 00000001 01010000 00110001B5. 程序的数据段为:DATA SEGMENTA DB ‘$’,10HB DB ‘PUTER’C DW 1234H, 0FFHD DB 5 DUP(?)E DD 1200459AHDATA ENDS求以下程序段执行后的结果是什么。
MOV AL, AMOV D*, C*CHG DL, AMOV B*, OFFSET BMOV C*, 3[B*]LEA B*, DLDS SI, ELES DI, E答:MOV AL, A AL=24HMOV D*, C D*=1234H*CHG DL, A DL=24H, A=34HMOV B*, OFFSET B B*=2MOV C*, 3[B*] C*=5550HLEA B*, D B*=000EHLDS SI, E DS=1200H, SI=459AHLES DI, E ES=1200H, DI=459AH6. 指出以下指令中哪些是错误的,错在什么地方〔1〕MOV DL,A* 〔2〕MOV 8650H,A* 〔3〕MOV DS,0200H〔4〕MOV [B*],[1200H] 〔5〕MOV IP,0FFH 〔6〕MOV [B*+SI+3],IP〔7〕MOV A*,[B*][BP] 〔8〕MOV AL,ES:[BP] 〔9〕MOV DL,[SI][DI]〔10〕MOV A*,OFFSET 0A20H 〔11〕MOV AL,OFFSET TABLE〔12〕*CHG AL,50H 〔13〕IN BL,05H 〔14〕OUT AL,0FFEH答:〔1〕长度不匹配〔2〕立即数不能做目的操作数〔3〕段存放器不能用立即数赋值〔4〕两个存单元不能直接传送数据〔5〕IP 不能用指令直接修改〔6〕指令中不能出现IP〔7〕B*/BP 应与SI/DI 搭配〔8〕正确〔9〕SI/DI 应与B*/BP 搭配〔10〕OFFSET 后应跟存单元〔11〕偏移地址为16 位,AL 长度不够〔12〕立即数不能用于*CHG〔13〕IN 必须用AL/A* 〔14〕操作数顺序反向;地址应为8 位7. 当前数据段中有一个十进制数字0~9 的7 段代码表,其数值依次为40H,79H,24H,30H,19H,12H,02H,78H,00H,18H。
要求用*LAT 指令将十进制数57 转换成相应的7 段代码值,存到B* 存放器中,试写出相应的程序段答:DATA SEGMENTTABLE DB 40H,79H,24H,30H,19H,12H,02H,78H,00H,18HDATA ENDS……MOV AL,5MOV B*,OFFSET TABLE*LAT TABLEMOV CL,ALMOV AL,7*LAT TABLEMOV BL,ALMOV BH,CL8. 当前SS=1050H,SP=0100H,A*=4860H,B*=1287H,试用示意图表示执行以下指令过程中,堆栈中的容和堆栈指针SP 是怎样变化的PUSH A*PUSH B*POP B*POP A*〔1〕指9. 以下指令完成什么功能?〔1〕ADD AL,DH 〔2〕ADC B*,C* 〔3〕SUB A*,2710H〔4〕DEC B* 〔5〕NEG C* 〔6〕INC BL〔7〕MUL B* 〔8〕DIV CL答:〔1〕AL+DH→AL 〔2〕B*+C*+CF→B* 〔3〕A*-2710H→A*〔__________4〕B*-1→B* 〔5〕0-C*→C* 〔6〕BL+1→BL〔7〕A**B*→D*,A* 〔8〕A*/CL 商→AL,余数→AH10. A*=2508H,B*=0F36H,C*=0004H,D*=1864H,求以下每条指令执行后的结果是什么?标志位CF 等于什么?〔1〕AND AH,CL 〔2〕OR BL,30H 〔3〕NOT A*〔4〕*OR C*,0FFF0H 〔5〕TEST DH,0FH 〔6〕CMP C*,00H〔7〕SHR D*,CL 〔8〕SAR AL,1 〔9〕SHL BH,CL〔10〕SAL A*,1 〔11〕RCL B*,1 〔12〕ROR D*,CL答:〔1〕A*=0408H,CF=0 〔2〕B*=0F36H,CF=0〔3〕A*=0DAF7H,CF 不变〔4〕C*=0FFF4H,CF=0〔5〕D*=01864H,CF=0 〔6〕C*=0004H,CF=0〔7〕D*=0186H,CF=0 〔8〕A*=2504H,CF=0〔9〕B*=0F036H,CF=0 〔10〕A*=4A10H,CF=0〔11〕B*=1E6C/1E6DH,CF=0 〔12〕D*=4186H,CF=011. 假设数据段定义如下:DATA SEGMENTSTRING DB ‘The Personal puter & TV’DATA ENDS试用字符串操作等指令编程完成以下功能:〔1〕把该字符串传送到附加段中偏移量为GET_CHAR 开场的存单元中。
〔2〕比拟该字符串是否与’The puter’一样,假设一样则将AL 存放器的容置1,否则置0并要求将比拟次数送到BL 存放器中〔3〕检查该字符串是否有’&’,假设有则用空格字符将其替换〔4〕把字符串大写字母传送到附加段中以CAPS 开场的单元中,其余字符传到以CHART开场的单元中然后将数据段中存储上述字符串的单元清0答:〔1〕CLDLEA SI,STRINGLEA DI,GET_CHARMOV C*,26REP MOVSB〔2〕补充在附加段定义STRING1 DB ‘The puter’MOV AL,1CLDLEA SI,STRINGLEA DI,STRING1MOV C*,12REPZ CMPSBJZ SKIPMOV AL,0SKIP: MOV B*,12SUB B*,C*〔3〕MOV A*, DATAMOV ES, A*CLDMOV AL,'&'LEA DI,STRINGMOV C*,26NE*T: REPNE SCASBJZ FINDJMP E*ITFIND: MOV BYTE PTR [DI-1], ' 'JC*Z E*ITJMP NE*TE*IT:〔4〕LEA SI,STRINGLEA DI,CAPSLEA B*,CHARTMOV C*,26NE*T: MOV AL, [SI]CMP AL,’A’ OTHERCMP AL,’Z’JA OTHERMOV ES:[DI],ALINC DIJMP SKIPOTHER: MOV ES:[B*],ALINC B*SKIP: MOV BYTE PTR[SI],0INC SILOOP NE*T12. 编程将A* 存放器中的容以相反的顺序传送到D* 存放器中,并要求A* 中的容不被破坏,然后统计D* 存放器中‘1’的个数是多少。
答::MOV BL,0PUSH A*MOV D*,0MOV C*,16NE*T: SHL A*,1JNC SKIPINC BLSKIP: RCR D*,1LOOP NE*TSTOP: POP A*13. 设CS=1200H,IP=0100H,SS=5000H,SP=0400H,DS=2000H,SI=3000H,B*=0300H,〔20300H〕=4800H,〔20302H〕=00FFH,TABLE=0500H,PROG_N 标号的地址为1200:0278H,PROG_F 标号的地址为3400H:0ABCH说明以下每条指令执行完后,程序将分别转移到何处执行?〔1〕JMP PROG_N〔2〕JMP B*〔3〕JMP [B*]〔4〕JMP FAR PROG_F〔5〕JMP DWORD PTR [B*]如将上述指令中的操作码JMP 改成CALL,则每条指令执行完后,程序转向何处执行?并请画图说明堆栈中的容和堆栈指针如何变化答:〔1〕1200H:0278H〔2〕1200H:0300H〔3〕1200H:4800H〔4〕3400H:0ABCH〔5〕00FFH:4800H将操作码JMP 改成CALL 后:〔1〕1200H:0278H指令长度为3,则IP=0100H+3=0103H,入栈〔5〕00FFH:4800H指令长度为2,则IP=0100H+2=0102H,入栈14. 在以下程序段括号中分别填入以下指令〔1〕LOOP NE*T 〔2〕LOOP。












