2022年完整word版,MCS_习题_答案 .pdf
习题 3:1.有 2 个 4 字节无符号数分别存放在扩展段2000H 和 3000H 开始的单元中,低位在前,高位在后,将两数相加,结果存放在数据段2000H 开始的单元中,请编写程序段完成以上功能;2.8086 系统中,请说明下列指令的源操作数的寻址方式是什么?1)MOV AX,1234H 立即数寻址2)MOV AX,1234H 直接寻址3)MOV AX,BX 寄存器间接寻址4)MOV AX,1234HBX+SI 相对基址变址寻址5)MOVSB 数据串寻址6)IN AL,DX I/O 端口间接寻址3.请在下表中画出下列数据段以十六进制表示的各单元值(表格中每个单元表示一个字节),并写出变量 var1,var2,var3 的偏移地址和 cnt 的值。data SEGMENT para ORG 30H var1 DB-2,A,2 dup(23)var2 DW-1 cnt EQU$-var1 var3 DW var2 data ENDS var1:0030H var2:0036H var3:0038H cnt=8 4.以下程序实现将变量var 进行 var*10+600 的操作,并将计算结果保存在变量 result 中,当程序执行到地址M5 的时候,请在以下表格中画出当前堆栈指针的位置和堆栈里的内容(程序断点可以用标号,在堆栈中可用寄存器名代表保存的内容,SS 的内容不用指定,表格的每个单元表示一个字)。(6分)data segment var dw 1000 低地址高地址0030H FEH 41H 32H 33H 32H 33H FFH FFH 36H 00H 名师资料总结-精品资料欢迎下载-名师精心整理-第 1 页,共 6 页 -result dd?data ends sseg segment stack db 100 dup(?)sseg ends code segment assume cs:code,ds:data,ss:ss_seg main proc far push ds mov ax,0 push ax mov ax,data mov ds,ax mov ax,var M1:call Caculate M2:dw 10 M3:dw 600 M4:lea bx,result mov bx,ax mov bx+2,dx ret main endp Caculate proc push bp mov bp,sp push si push bx mov bx,bp+2 mov si,cs:bx 高地址低地址DS 0 M2 BP SI BX 名师资料总结-精品资料欢迎下载-名师精心整理-第 2 页,共 6 页 -mul si M5:add ax,cs:2bx adc dx,0 add bx,4 mov bp+2,bx pop bx pop si pop bp ret Caculate endp code ends end main 5.问答题1)若 AL=81H,则执行指令 CBW 后 AH 的内容为多少?AH=0FFH 2)若 BL=BEH,执行下列指令序列,则每执行一步,BL 和 CF 的值为多少?SHL BL,1;BL=_ 7CH_,CF=_ _1_ _ MOV CL,2 SHR BL,CL;BL=_ _1FH_ _,CF=_ _0_ OR BL,80 SAR BL,1;BL=_ CFH_ _,CF=_ _1_ ROR BL,CL;BL=_F3H_ _,CF=_ _1_ INC CL RCL BL,CL;BL=_ 9FH_,CF=_ _1_ 3)什么是短跳转、近跳转、远跳转?短跳转:段内直接跳转,偏移量为-128127 近跳转:段内直接跳转,偏移量为-3276832767 远跳转:段间直接跳转4)若当前 SP=1000H,CS=B000H,IP=0100H,且当前 FLAG=2345H,则执行指令INT 21H 以后,SP 的值变为多少?堆栈段中6 个存储单元名师资料总结-精品资料欢迎下载-名师精心整理-第 3 页,共 6 页 -0FFFH、0FFEH、0FFDH、0FFCH、0FFBH、0FFAH 的值分别是多少?SP=0FFAH,(0FFFH)=23H (0FFEH)=45H (0FFDH)=B0H(0FFCH)=00H(0FFBH)=01H (0FFAH)=00H 6.请写出程序段实现下列功能例如:从 160H 端口读取 1 个字节MOV DX,160H IN AL,DX 1)将一个 8 位数 20H 写入到地址为 20H 的端口;MOV AL,20H OUT 20H,AL 2)若 AL=56H,BL=57H,将这两个压缩格式BCD 码相加并将结果保存到存储单元 2000H 中;ADD AL,BL DAA MOV 2000H,AL 3)将 2 个 32 位无符号数 DAT1 和 DAT2 相乘,结果保存在64 位无符号数中,请编写程序段。DAT1 DD 12345678H DAT2 DD 9ABCDEFH RESULT DQ 0 MOV AX,word ptr DAT2;(DAT1)L*(DAT2)L MUL word ptr DAT1 MOV word ptr RESULT,AX MOV word ptr RESULT,DX;保存结果MOV AX,word ptr DAT2 MUL word ptr DAT1+2;(DAT1)H*(DAT2)L ADD word ptr RESULT+2,AX ADC word ptr RESULT+4,0 名师资料总结-精品资料欢迎下载-名师精心整理-第 4 页,共 6 页 -MOV AX,word ptr DAT2+2;(DAT1)L*(DAT2)H MUL word ptr DAT1 ADD word ptr RESULT+2,AX ADC word ptr RESULT+4,DX ADC word ptr RESULT+6,0 MOV AX,word ptr DAT2+2;(DAT1)H*(DAT2)H MUL word ptr DAT1+2 ADD word ptr RESULT+4,AX ADC word ptr RESULT+6,DX 4)求数据段偏移地址为1000H 开始的一个字符串的长度,字符串以ASCII 码 0 为结束符,长度要求包括结束符;(提示:初始化AL=0 CX=0FFFFH,然后使用 REPNZ SCASB 命令,最后根据 CX 的值计算字符串长度)MOV AX,DS MOV ES,AX MOV DI,1000H MOV AL,0 MOV CX,0FFFFH CLD REPNZ SCASB NOT CX ;或者MOV AX,0FFFFH;SUB AX,CX;MOV CX,AX;此时 CX 中存放的就是字符串的长度名师资料总结-精品资料欢迎下载-名师精心整理-第 5 页,共 6 页 -7.请判断以下 8086 汇编指令是否正确,正确则在指令前打,错误则打()1)MOV DS,1000H ()18)LEA 1000H,MSG()2)MOV DX,1000H ()19)LDS ES,MSG()3)MOV IP,AX()20)LES DX,MSG()4)MOV 1000H,SI()21)ADD DS,1000H()5)PUSH SI ()22)ADC DX,DI()6)PUSH AL()23)SUB BX,1000H()7)PUSH 200H()24)SUB BX+BP,1000H()8)POP CS ()25)IMUL 100H()9)POP AX()26)DIV word ptr 100HBP()10)XCHG AX,DS ()27)AND BP,1001H()11)XCHG AX,1000HSI+DI ()28)SHL BX,1(编译时会警告)()12)IN AX,SI()29)ROR AX,4()13)IN BL,80H()30)RCL word ptr BX,CL()14)IN AX,160H()31)SAR dword ptr BX,CL()15)IN AL,DX ()32)MOVSW()16)OUT AL,DX ()33)REPNZ SCASB()17)OUT 80H,AL()34)RETI 以上除了打的指令外,其余指令全部为名师资料总结-精品资料欢迎下载-名师精心整理-第 6 页,共 6 页 -