1、4. 举例说明 CF 和 OF 标志的差异。溢出标志 OF 和进位标志 CF 是两个意义不同的标志 进位标志表示无符号数运算结果是否超出范围,运算结果仍然正确;溢出标志表示有符号数运算结果是否超出范围,运算结果已经不正确例 1:3AH + 7CHB6H 无符号数运算:58124182,范围内,无进位 有符号数运算: 58124182 ,范围外,有溢出例 2:AAH + 7CH(1)26H 无符号数运算:170124294,范围外,有进位 有符号数运算:8612428 ,范围内,无溢出5. 什么是 8086 中的逻辑地址和物理地址?逻辑地址如何转换成物理地址?请将如下逻辑地址用物理地址表达: (
2、1)FFFFh:0 (2)40h:17h (3)2000h:4500h (4)B821h:4567h对应每个物理存储单元都有一个唯一的 20 位编号,就是物理地址,从 00000HFFFFFH 在 8086 内部和用户编程时,采用的段基地址 : 段内偏移地址形式称为逻辑地址将逻辑地址中的段地址左移 4 位,加上偏移地址就得到 20 位物理地址 请将如下逻辑地址用物理地址表达: (1)FFFFh:0FFFF0H (2)40h:17h00417H (3)2000h:4500h24500H (4)B821h:4567hBC777H (不要算错)8、已知 DS 2000H、BX = 0100H、SI
3、= 0002H,存储单元20100H 20103H依次存放 12 34 56 78H,21200H 21203H依次存放 2A 4C B7 65H,说明下列每条指令执行完后 AX 寄存器的内容。 (1) mov ax,1200h (2) mov ax,bx (3) mov ax,1200h (4) mov ax,bx (5) mov ax,bx+1100h (6) mov ax,bx+si (7) mov ax,bxsi+1100h(1)AX1200h (2)AX0100h (3)AX4C2Ah (4)AX3412h (5)AX4C2Ah (6)AX7856h (7)AX65B7h9、指出下列
4、指令的错误 (1) mov cx,dl (2) mov ip,ax (3) mov es,1234h (4) mov es,ds (5) mov al,300 (6) mov sp,ax (7) mov ax,bx+di (8) mov 20h,ah(1) 两操作数类型不匹配 (2) IP 指令指针禁止用户访问 (3) 立即数不允许传给段寄存器 (4) 段寄存器之间不允许传送 (5) 两操作数类型不匹配(6) 目的操作数应为 BP (7) 源操作数应为 BX+DI (8) 立即数不能作目的操作数10、已知数字 0 9 对应的格雷码依次为:18H、34H、05H、06H、09H、0AH、0CH、
5、11H、12H、14H,它存在于以 table 为首地址(设为 200H)的连续区域中。请为如下程序段的每条指令加上注释,说明每条指令的功能和执行结果。lea bx,table mov al,8 xlatlea bx,table ;获取 table 的首地址,BX200H mov al,8 ;传送欲转换的数字,AL8 xlat ;转换为格雷码,AL12H11、给出下列各条指令执行后 AL 值,以及 CF、ZF、SF、OF 和 PF 的状态: mov al,89h add al,al add al,9dh cmp al,0bch sub al,al dec al inc alCF ZF SF O
6、F PF AL=89h CF ZF SF OF PF AL=12h 1 0 0 1 1 AL=0afh 0 0 1 0 1 AL=0afh 1 0 1 0 1 AL=00h 0 1 0 0 1 AL=0ffh 0 0 1 0 1 AL=00h 0 1 0 0 112、分别用一条汇编语言指令完成如下功能: (1)把 BX 寄存器和 DX 寄存器的内容相加,结果存入 DX 寄存器。 (2)用寄存器 BX 和 SI 的基址变址寻址方式把存储器的一个字节与 AL 寄存器的内容相加,并把结果送到 AL 中。 (3)用 BX 和位移量 0B2H 的寄存器相对寻址方式把存储器中的一个字和 CX 寄存器的内容
7、相加,并把结果送回存储器中。 (4)用位移量为 0520H 的直接寻址方式把存储器中的一个字与数 3412H 相加,并把结果送回该存储单元中。 (5)把数 0A0H 与 AL 寄存器的内容相加,并把结果送回 AL 中。(1)ADD DX,BX (2)ADD AL,BX+SI (3)ADD BX+0B2H,CX (4)ADD WORD PTR 0520H,3412H (5)ADD AL,0A0H13、设 X、Y、Z、V 均为 16 位带符号数,分别装在 X、Y、Z、V 存储单元中,阅读如下程序段,得出它的运算公式,并说明运算结果存于何处。 mov ax,X imul Y mov cx,ax mo
8、x bx,dx mov ax,Z cwd add cx,ax adc bx,dx sub cx,540 sbb bx,0 mov ax,V cwd sub ax,cx sbb dx,bx idiv X;为了避免与操作数地址混淆,将题中 X,Y,Z,V 字操作数改为 A,B,C,D mov ax,X ;ax=A imul Y ;dx,ax = A*B (将操作数看作符号数,以下同) mov cx,ax mov bx,dx ;bx,ax - dx,ax =A*B mov ax,Z ;ax = C cwd ;dx,ax =C (扩展符号后为双字) add cx,ax adc bx,dx ;bx,cx
9、 - bx,cx+dx,ax=A*B+C sub cx,540 sbb bx,0 ;bx,cx- A*B+C-540 mov ax, V ;ax= D cwd ;dx,ax= D (扩展符号后为双字) sub ax, cx sbb dx, bx ;dx,ax = dx,ax - bx,cx = D-(A*B+C-540) idiv X ;运算结果:D-(A*B+C-540h)/A ;ax 存商,dx 存余数 14、给出下列各条指令执行后的结果,以及状态标志 CF、OF、SF、ZF、PF 的状态。 mov ax,1470h and ax,ax or ax,ax xor ax,ax not ax
10、test ax,0f0f0h注意: 1. mov, not 指令不影响标志位 2. 其他逻辑指令使 CF=OF=0, 根据结果影响其他标志位。16、假设 DS=2000H,BX=1256H,SI=528FH,位移量 TABLE=20A1H,232F7H=3280H,264E5H=2450H,试问执行下列段内间接寻址的转移指令后,转移的有效地址是什么? (1) JMP BX (2) JMP TABLEBX (3) JMP BXSI(1)JMP Bx ;转移的有效地址 EA=BX=1256h (2)JMP tABLEBx ;转移的有效地址 EA=ds:20a1h+1256h=232f7=3280h
11、 (3)JMP Bxsi ;转移的有效地址 EA=ds:1256h+528fh=264e5h=2450h17、判断下列程序段跳转的条件 (1) xor ax,1e1eh je equal (2)test al,10000001b jnz there (3) cmp cx,64h jb there(1) xor ax,1e1eh je equal ;AX1e1eh(异或后为 0) (2)test al,10000001b jnz there ;AL 的 D0 或 D7 至少有一位为 1(3) cmp cx,64hjb there 指令 AX 的值 CF OF SF ZF PF Mov ax,14
12、07h 1470h - - - - - And ax,ax 1470h 0 0 0 0 0 Or ax,ax 1470h 0 0 0 0 0 Xor ax,ax 0 0 0 0 1 1 Not ax 0ffffh - - - - - Test ax,0f0f0h 0ffffh 0 0 1 0 1 ;CX(无符号数) 64h 19、有一个首地址为 array 的 20 个字的数组,说明下列程序段的功能。 mov cx,20 mov ax,0 mov si,ax sum_loop: add ax,arraysi add si,2 loop sum_loop mov total,ax答:将首地址为
13、array 得 20 个字的数组求和,并将结果存入 total 单元中。2.20 按照下列要求,编写相应的程序段: 起始地址为 string 的主存单元中存放有一个字符串(长度大于 6) ,把该字符串中的第 1 个和第 6 个字符(字节量)传送给 DX 寄存器。mov dl,string1mov dh,string6 有两个 32 位数值,按 “小端方式”存放在两个缓冲区 buffer1 和 buffer2 中,编写程序段完成 DX.AXbuffer1buffer2 功能。mov ax, word ptr buffer1sub ax, word ptr buffer2;先减低 16 位mov
14、dx, word ptr buffer1+2sbb dx, word ptr buffer2+2;后减高 16 位,需减低 16 位的借位 编写一个程序段,在 DX 高 4 位全为 0 时,使 AX0;否则使 AX1。test dx,0f000hjz nextmov ax,-1jmp donenext: mov ax,0done: 把 DX.AX 中的双字右移 4 位答:mov cx,4again: shr dx,1 ;右移一位,移出的低位进入 CF 标志rcr ax,1 ;将 CF 移进 AX 高位,同时实现 AX 右移loop again ;循环 4 次,实现 4 位右移 有一个 100
15、个字节元素的数组,其首地址为 array,将每个元素减 1(不考虑溢出或借位)存于原处。mov cx,100mov bx,0again: sub arraybx,1inc bx loop again 2.21 AAD 指令是用于除法指令之前,进行非压缩 BCD 码调整的。实际上,处理器的调整过程是:ALAH10AL,AH0。如果指令系统没有 AAD 指令,请用一个子程序完成这个调整工作。aadp procpush bxshl ah,1mov bl,ahshl ah,1shl ah,1add bl,ahadd al,blmov ah,0pop bxretaadp endp2.25 编写一个程序段
16、:先提示输入数字 “Input Number:0 9”,然后在下一行显示输入的数字,结束;如果不是键入了 0 9 数字,就提示错误“Error!” ,继续等待输入数字。;数据段inmsg db Input Number: 0 9,0dh,0ah,$ermsg db Error!,$;代码段mov dx, offset inmsgmov ah, 9int 21h ;显示输入数字 09again: mov ah, 1int 21h ;接受一个字符cmp al, 0 ;判断是否输入的是数字 09jb erdispcmp al, 9ja erdispmov dl,almov ah, 2int 21h ;显示输入的数字jmp done ;结束erdisp: mov dx,offset ermsgmov ah, 9int 21h ;显示输入错误jmp again ;继续输入done: