汇编语言程序设计(钱晓捷)课后答案.pdf
欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.汇编语言程序设计(第二版)钱晓捷 习题答案 第二章()2.1 (1)AX1200h (2)AX0100h (3)AX4C2Ah (4)AX3412h (5)AX4C2Ah (6)AX7856h (7)AX65B7h 2.2(1)两操作数类型不匹配 (2)IP 指令指针禁止用户访问 (3)立即数不允许传给段寄存器 (4)段寄存器之间不允许传送 (5)两操作数类型不匹配 (6)目的操作数应为 BP (7)源操作数应为 BX+DI (8)立即数不能作目的操作数 2.3 lea bx,table ;获取 table 的首地址,BX200H mov al,8 ;传送欲转换的数字,AL8 xlat ;转换为格雷码,AL12H 2.4 堆栈是一种按“先进后出”原则存取数据的存储区域。堆栈的两种基本操作是压栈和出栈,对应的指令是PUSH 和 POP。2.5 mov ax,8057h push ax mov ax,0f79h push ax pop bx ;bx=0f79h pop bx ;DS:0f79h=8057h 2.6 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 1 2.7 W=X+Y+24-Z 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.2.8 (1)ADD DX,BX (2)ADD AL,BX+SI (3)ADD BX+0B2H,CX (4)ADD WORD PTR 0520H,3412H (5)ADD AL,0A0H 2.9;为了避免与操作数地址混淆,将题中 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-bx,cx+dx,ax=A*B+C sub cx,540 sbb bx,0 ;bx,cx DI,转到 above 执行 cmp dx,di ja above ;jnbe above (2)若 AX SI,转到 greater 执行 cmp ax,si jg greater ;jnle greater (3)若 CX=0,转到 zero 执行 cmp cx,0 jcxz zero jz zero (4)若 AXSI 产生溢出,转到 overflow 执行;cmp ax,di jo overflow (5)若 SIAX,转到 less_eq 执行;cmp si,ax cmp ax,si jle less_eq jge less_eq (6)若 DIDX,转到 below_eq 执行。cmp di,dx 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.cmp dx,di jbe below_eq jae below_eq 2.25;答:将首地址为 array 得 20 个字的数组求和,并将结果存入 total 单元中。2.26;(1)mov si,0 mov dl,stringsi ;第 1 个字符送 dl 寄存器 mov si,5 mov dh,stringsi ;第 6 个字符送 dh 寄存器 (2)xor si,si ;si 清零 mov al,buffersi ;第一字节 inc si mov ah,buffersi ;第二字节 mov cl,4 shl ah,cl ;BCD 码移到高半字节 or al,ah ;组合成压缩 BCD 码 mov dl,al ;存入 dl 寄.inc si mov al,buffersi ;第三字节 inc si mov ah,buffersi ;第四字节 mov cl,4 shl ah,cl ;BCD 码移到高半字节 or al,ah ;组合成压缩 BCD 码 mov dh,al ;存入 dh 寄.(3)test dx,0f000h jz zero mov ax,-1 jmp done zero:mov ax,0 done:ret (4)lea bx,buffer1 lea dx,buffer2 mov cx,8 ;8 个字节 xor si,si ;si=0 clc ;CF=0 (5)mov ax,0b800h mov ds,ax ;段地址 xor si,si ;地址偏移量 si=0 xor dx,dx ;和的高字 dx=0 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.mov cx,99 ;加的次数 mov ax,si ;第一个数 again:inc si ;指向下一个字单元 inc si add ax,si ;加下一个数 jnc noc ;无进位转 inc dx ;有进位 dx=dx+1 noc:dec cx ;次数-1 jnz cx,again ;非 0 继续加 ret (6)mov si,offset string mov cx,8000h ;32k=215=8000h again:cmp si,$jnz next mov si,20h ;if si=$si-next:inc si loop again (7)xor si,si ;si-0 mov cx,100 ;循环次数 again:dec arraysi dec cx jnz again (8)xor si,si ;si-0 coun:cmp stringsi,$je done inc si jmp coun done:ret 2.27;(1)使 CF0:clc ;and ax,ax ;or ax,ax (2)使 AX0:xor ax,ax ;and ax,0 ;mov ax,0 (3)同时使 AX0 和 CF0:and ax,0;xor ax,ax;sub ax,ax 2.29;压缩 BCD 码加法:AXAXBX 出口参数:AXBCD 码和 2.34;okmsg db OK,$errmsg db Error!Overflow!,$mov ax,X sub ax,Y jo overflow mov dx,offset okmsg jmp next overflow:mov dx,errmsg 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.next:mov ah,9 int 21h 错误:mov ax,X sub ax,Y jo overflow mov dx,offset okmsg okmsg db OK,$mov dx,errmsg ;错误 1:数据定义在代码中 mov ah,9 int 21h overflow:errmsg db Error!Overflow!,$mov dx,errmsg ;错误 2:缺少 JMP 指令 mov ah,9 int 21h 2.37;xt237.asm.model small.stack.data array db 255 db 0 array1 db 255 dup($)array2 db 0dh,0ah,$.code.startup mov ah,0ah ;键盘输入字符串 mov dx,offset array int 21h mov dx,offset array2;回车换行 mov ah,09h int 21h mov bx,offset array1 again:mov al,bx cmp al,$jz done cmp al,a ;小于 a 和大于 z 的字符不是小写字母 jb next cmp al,z ja next sub al,20h ;在 a 和 z 之间的字符才是小写字母,转换为大写 mov bx,al ;保存到原位置 next:inc bx jmp again done:mov dx,offset array1 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.mov ah,09h int 21h.exit 0 end 第三章(01)3.1;硬指令:每个硬指令就是一个处理器指令,在 CPU 执行时产生相应功能;伪指令:伪指令并不产生处理器指令,它通常用于辅助汇编程序对源程序进行汇编。3.2;3.5;编辑 文本编辑程序 汇编语言源程序.asm 汇编 汇编程序 目标模块文件.obj 连接 连接程序 可执行文件.exe 或.com 调试 调试程序 应用程序 3.6;;xt236.asm 简化段定义格式 .model small;定义程序的存储模式(小模式).stack ;定义堆栈段(默认 1024 个字节).data ;定义数据段 str1 ab Input Number:09:,0dh,0ah,$str2 ab Error!,0dh,0ah,$.cade ;定义代码段 .startup ;说明程序的起始点,建立 ds,ss 的内容。mov ah,09h ;显示 str1 字符串 mov dx,offset str1 int 21h gtekey:mov ah,1 ;调用 BIOS 判断按键功能 int 16h jz getkey ;如 zf=0,无键按下,等待 cmp al,0 ;有键按下,键值与0比较 jb error ;如 0,出错处理 cmp al,9 ;有键按下,键值与 9比较 ja error ;如 9,出错处理 mov ah,02h ;调用 DOS 显示字符功能,显示该数字 mov dl,al int 21h .exit 0 ;终止程序执行,返回 DOS error:mov ah,09h ;出错,调用 DOS 功能显示 str2 字符串 mov dx,offset str2 int 21h jmp getkey ;等待按键 end ;汇编结束 3.7;xt307.asm stack segment 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.dw 512 dup(?)stack ends data segment array db 255 db 0 array1 db 255 dup($)array2 db 0dh,0ah,$data ends code segment code assume cs:code,ds:data,ss:stack start:mov ax,data mov ds,ax mov ah,0ah ;键盘输入字符串 mov dx,offset array int 21h mov dx,offset array2;回车换行 mov ah,09h int 21h mov bx,offset array1 again:mov al,bx cmp al,$jz done cmp al,a ;小于 a 和大于 z 的字符不是小写字母 jb next cmp al,z ja next sub al,20h ;在 a 和 z 之间的字符才是小写字母,转换为大写 mov bx,al ;保存到原位置 next:inc bx jmp again done:mov dx,offset array1 mov ah,09h int 21h mov ax,4c00h int 21h code ends end start 3.9;(1)mov byte ptr bx,1000 ;1000超出了一个字节范围 (2)mov bx,offset mywordsi;寄存器的值只有程序执行时才能确定,;而 offset是汇编过程计算偏移地址,故无法确定 ;可以改为 lea bx,mywordsi (3)cmp mybyte1,mybyte2 ;两个都是存储单元,指令不允许 (4)mov al,mybyte1+mybyte2;变量值只有执行时才确定,汇编过程不能计欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.算 (5)sub al,myword ;字节量 AL 与字量 myword,类型不匹配 (6)jnz myword ;Jcc指令只有相对寻址方式,不支持间接寻址方式 3.10;前者为“与”操作硬指令助记符,可汇编成机器代码。后者为逻辑运算符,在汇编时进行“与”运算,产生具体数值。3.11;注:对于逻辑运算,有关操作数可化为二进制数。(1)mov al,23h AND 45h OR 67h ;67h (2)mov ax,1234h/16+1Oh ;133h (3)mov ax,NOT(65535 XOR 1234h);1234h (4)mov al,LOW 1234h OR HIGH 5678h ;76h (5)mov ax,23h SHL 4 ;0234h (6)mov ax,1234h SHR 6 ;0048h (7)mov al,a AND(NOT(a-A);41h (8)mov al,H OR 00100000b ;68h (9)mov ax,(76543 LT 32768)XOR 7654h ;7654h 3.12;假设 block 开始的数据块有 32 个字节数据:16 个正数+100(64h),16个负数-48(0doh)分别连续分布:block db 16 dup(100),16 dup(-48);也可以是任意字节数据,随意分布。dplus db 32 dup(?);为正数预留存储空间 dminus db 32 dup(?);为负数预留存储空间 count equ 32 ;字节数 3.15;mydataseg segment my1b db Personal Computer my2b db 20 my3b db 14h ;20h my4b db 00010100b my5w dw 20 dup(?)my6c equ 100 ;my6c=100 my7c equ mydataseg ends 3.18;段地址:表示标号所在代码段的段地址;偏移地址:表示标号所在代码段的段内偏移地址;欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.类型:引用该标号时,表示它所在同一个段near 类型,还是另外一个段far 类型。3.19;mydata segment ORG lO0h VARW DW l234H,5678H VARB DB 3,4 AGLIN 4 VARD DD 12345678H EVEN BUFF DB 10 DUP(?)MESS DB HELLO MOV AX,OFFSET VARB+OFFSET MESS ;AX=4+16H=1AH MOV AX,TYFE TYPE BUFF+TYPE MESS+TYPE VARD;AX=1+1+4=06H MOV AX,SIZE VARW+SIZE BUFF+SIZE MESS;AX=4+10+5=19=13H MOV AX,LENGTH VARW+LENGTH VARD ;AX=2+1=03H MOV AX,LENGTH BUFF+SIZE VARW ;AX=10+4=14=0EH MOV AX,TYPE BIGIN ;AX=FF02H(近)MOV AX,OFFSET BEGIN ;AX=1BH 3.22;段定义伪指令 段名 定位 组合 类别 组名 .CODE _TEXT WORD PUBLIC CODE .DATA _DATA WORD PUBLIC DATA DGROUP .STACK STACK PARA STACK STACK DGROUP 3.25;.model small .stack .data num equ 5 datalist dw-1,0,2,5,4,?.code .startup mov bx,offset datalist mov cx,num xor ax,ax again:add ax,bx inc bx inc bx loop again 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.mov bx,ax .exit 0 end 3.26;stack segment para stack dw 512 dup(?)stack ends data segment dword array db 100 dup(?)data ends code segment code assume cs:code,ds:data,es:data,ss:stack org 100h start:mov ax,data mov ds,ax mov es,ax mov di,offset array mov al,64h mov cx,100 cld rep stosb mov ax,4c00h int 21h code ends end start 3.27;解答 ;xt327.asm .model small .stack 256 ;定义堆栈段大小为 256 个字节 .data anum dd 11223344h ;定义两个双字的数(随意)bnum dd 77553311h sum dd?;定义结果,执行后为:88776655h .code .startup xor si,si ;相对于变量的位移量清零 mov cx,2 ;分高低字分别相加,共两次 clc ;清零 cf again:mov ax,anumsi ;取第一个数的一个字(先低字后高字)欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.adc ax,bnumsi ;取第二个数的一个字(先低字后高字)mov sumsi,ax ;存和的一个字(先低字后高字)inc si ;修改位移量指向下一个字(加 2)inc si loop again ;cx=cx-1,if cx0,jump again .exit 0 end 3.28;.startup xor si,si ;位移量清零 mov al,bdatasi ;取第一个数 mov cx,num-1 ;累加次数 again:inc si ;指向下一个数 adc al,bdatasi ;累加 loop again ;如未完,继续累加 mov sum,al ;完了,存结果 .exit 0 end 4.3;思路:设这四组从低位到高位分别放在 AL、BL、CL 和 DL 寄存器中。这里仅列出代码段:mov bl,al ;将 al 中的两组分开 and al,0fh ;屏蔽高四位后送 al mov cl,4 ;原 al 中的数据逻辑右移 4 次送 bl shr bl,cl mov dl,ah ;将 ah 中的两组分开 and dl,0f0h ;屏蔽低高四位后送 dl mov cl,4 ;原 ah 中的数据逻辑右移 4 次送 dl shr dl,cl mov cl,ah ;屏蔽高四位后送 cl and cl,0fh 4.4;getkey:mov ah,1 ;从键盘输入,出口:al 存键值 int 21h cmp al,a ;判键值是小写字母?jb getkay cmp al,z ja getkay sub al,20h ;是小写字母转换为大写字母 mov ah,09h ;显示 int 21h 4.8;(1)将 jmp tablebx指令改为:mov dx,tablebx (2)去掉源程序中:.exit 0-end 之间的语句 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.4.17;.model small .stack 256 .data stri1 db please input number:1-9,odh,oah,$.code .startup again:mov dx,offset stri1 ;显示 stri1,提示输入 mov ah,09h int 21h mov ah,01h ;调用输入一个字符 int 21h ;输入一个字符存在 al 中 cmp al,1 ;判该字符,如不在1-9 jb again ;重新输入 cmp al,9 ja again and al,0fh ;在1-9,屏蔽高 4 位 mov cx,al ;振铃次数送 cx .repeat mov dl,07h ;调用一次振铃 mov ah,02h int 21h mov dx,0ffffh ;延时 abc:dec dx jnz abc .untilcxz ;cx=cx-1,cx=0 退出 .exit 0 end 4.22;crazy PROC ;crazy PROC push ax ;xor ax,ax ;xor ax,ax xor dx,dx ;xor dx,dx again:add ax,bx ;again:add ax,bx adc dx,0 ;adc dx,0 inc bx ;inc bx inc bx ;inc bx loop again ;loop again ret ;ret ENDP crazy ;crazy ENDP 425;子程序中又调用子程序就形成子程序嵌套。子程序中直接或间接调用该子程序本身就形成子程序递归。426;.model small .stack 256 .data stdng db HeLLO eveRyboDy!,0 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.code .startup mov bx,offset atring again:mov al,bx call chan ;调用过程 mov bx,al next:inc bx jmp again done:.exit 0 chan proc ;大写转换为小写字母的过程 or al,al jz done cmp al,A jb next cmp al,Z ja next or al,20h ret chan endp end 427;astob proc and dh,0fh ;十位数的 ASCII 码转为二进制数 mov al,dh mul 10 ;al=10*dh and dl,0fh ;个位数的 ASCII 码转为二进制数 add al,dl ;al=10*dh+dl ret astob endp 51;cmp X,5 je abc jmp done abc:cmp ax,bx jne cde jmp done cde:inc ax done:.52;cmp X,5 je abc jmp done cmp ax,bx jne abc jmp done abc:inc ax done:.欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.54;宏定义采用一对伪指令实现,格式如下(其中方括号表示可选):宏名 macro 形参表 宏定义体 endm 宏调用时,利用宏名带上实参即可,格式如下:宏名 实参表 56;宏的参数功能非常强大,即可以没有参数,也可以带有一个或多个参数;而且参数的形式非常灵活,可以是常量、变量、存储单元、指令或它们的一部分,还可以是表达式等。宏展开时的形参与实参结合是用位置匹配的实参对形参进行取代。实参个数与形参个数不同时,多余的实参没有作用,缺少的实参则用空格代替。取代时,不进行有效性等检查。57;宏汇编的特点是在汇编阶段进行语句展开,无需返回,不减少目标程序代码,执行速度没有改变;通过形参、实参结合传递参数。宏汇编适合于程序段较短或要求执行速度快的场合。子程序在执行阶段需要由主程序执行调用指令 CALL 进行调用,进而转入子程序执行,子程序执行结束执行返回指令 RET 返回主程序。子程序如果被多次使用,则会减少目标程序代码;主程序与子程序之间主要采用寄存器、存储单元、堆栈等传递参数。子程序适合于程序段较长或为减少目标代码的场合。59;shrot word ptr bx,4,ror 1 push cx 1 mov cl,4 1 ror word ptr bx,cl 1 pop cx 5.10;logical macro lcode,dopd,sopd lcode dopd,sopd endm 例如,如果使用“and ax,bx”指令,可以利用该宏定义,写出宏指令如下:logical and,ax,bx 初看起来,这个问题似乎比较难解决。实际上,这 4 条逻辑指令都具有相同的指令操作数格式,所以可以归纳为如上宏定义。5.12;move MACRO doprnd,soprnd push ax mov ax,soprnd mov doprnd,ax pop ax ENDM 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.第五章(02)5.13;解答 movstr strN,dstr,sstr lea si,sstr lea di,dstr mov cx,strN cld rep movsb endm 5.14;ABSDIF Pl,P2,DISTANCE ABSDIF BX,SI,DI 1 push ax 答:1 push ax 1 mov ax,P1 1 mov ax,bx 1 sub ax,P2 1 sub ax,si 1 cmp ax,0 1 cmp ax,0 1 jge?0000 1 jge?0000 1 neg ax 1 neg ax 1?0000 1?0000 1 mov DISTANCE,ax 1 mov di,ax 1 pop ax 1 pop ax 5.15;wtemp =2 repeat 100 dw 0 dw wtemp wtemp =wtemp+2 endm 5.18;DOS21H MACRO callnum,calladdress mov ah,callnum ifnb mov dx,calladdress endif int 21h ENDM 5.22;1.编写主程序,并进行汇编产生 OBJ模块;2.编写独立的子程序,也进行汇编产生 OBJ模块;3.分别编写主程序与子程序时,需要处理好共用变量、过程、逻辑段属性、参数传递等问题;4.利用连接程序将主程序模块和子程序模块连接起来,形成完整的可执行程序。欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.5.28;;数据段 table dw 2277,2138,1808,1709,1522,1356,1208,1139 ;对应中音 1 7 和高音 i 的定时器记数值 ;代码段 mov al,0b6h ;设置定时器 2 工作方式 out 43h,al again:mov ah,1 ;等待按键 int 21h cmp al,1 ;判断是否为数字 18 jb next cmp al,8 ja next sub al,30h ;18 的 ASCII码转换为二进制数 sub al,1 ;再减 1,将数字 18 变为 0 7,以便查表 xor ah,ah shl ax,1 ;乘以 2 mov bx,ax ;记数值表是 16 位数据,无法采用 xlat 指令 mov ax,tablebx ;取出对应的记数值 out 42h,al ;设置定时器 2 的记数值 mov al,ah out 42h,al in al,61h ;打开扬声器声音 or al,03h ;使 D1D0PB1PB011b,其他位不变 out 61h,al jmp again ;连续发声,直到按下另一个键 next:push ax in al,61h ;不是数字 18,则关闭扬声器声音 and al,0fch ;使 D1D0PB1PB000b,其他位不变 out 61h,al pop ax cmp al,1bh ;判断是否为 ESC键(对应 ASCII码 1bh)jne again ;不是 ESC,继续;否则程序执行结束 -1。欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.(1)立即寻址 没有 (2)直接寻址 7237H(3)使用 BX 的寄存器寻址 没有 (4)使用 BX 的间接寻址 637DH(5)使用 BX 的寄存器相对寻址 0D5F0H(6)基址变址寻址 8E18H(7)相对基址变址 004FH 2。根据下列要求,写出相应的汇编指令。(1)ADD DX,BX (2)ADD AL,BXSI (3)ADD BX0B2H,CX (4)MOV AX,2A59H ADD 0524H,AX(5)ADD AL,0B5H 3。(1)寄存器间接寻址 MOV BX,OFFSET BLOCK 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.ADD BX,OAH MOV DX ,BX(2)寄存器相对寻址 MOV BX,0AH MOV DX,BLOCKBX(3)基址变址寻址 MOV BX,OFFSET BLOCK MOV SI,OAH MOV DX,BXSI 4。现有(DS)=2000H,(BX)=0100H,(SI)=0002H,(20100)=12H,(20101)=34H,(20102)=56H,(20103)=78H,(21200)=2AH,(20201)=4CH,(21202)=B7H,(21203)=65H,试说明下列各条指令执行完后,AX 寄存器的内容。(1)MOV AX,1200H 1200H (2)MOV AX,BX 0100H (3)MOV AX,1200 4C2AH (4)MOV AX,BX 3412H (5)MOV 1100BX 4C2AH 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.(6)MOV AX,BXSI 7856H (7)MOV AX,1100BXSI 65B7H 5。(1)7CD9H (2)(212A0+1200)H=0600H (3)(212A0H+1200H+5119H)H=098AH 6。MOV BX,2000H 或 LES BX,2000 LES DI,BX MOV AX,ES:BX MOV AX,ES:DI 7。转向地址 OBJ的值分别为:(1)064DH (2)0691H (3)05ECH 注意有符号数的符号位 8。(1)MOV AX,0ABH 立即数寻址 无物理地址 (2)MOV AX,BX 寄存器寻址 同上 (3)MOV AX,100 直接寻址 20100H (4)MOV AX,VAL 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.直接寻址 20050H (5)MOV AX,BX 寄存器间接寻址 20100H (6)MOV AX,ES:BX 直接寻址 21100H (7)MOV AX,BP 寄存器间接寻址 20010H (8)MOV AX,SI 同上 200A0H (9)MOV AX,BX+10 寄存器相对寻址 20110H (10)MOV AX,VALBX 同上 20150H (11)MOV AX,BXSI 基址变址寻址 201A0H (12)MOV AX,VALBXSI 相对基相变址寻址 201F0H 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.9。(1)的指令:MOV AX,BX0CH MOV ZREO,AX (2)的指令:MOV AX,ARRAYBX MOV ZREO,AX 10。MOV AX,TABLE 是把符号地址 TABLE里的内容送到 AX里,指令执行完后,(AX)=1234H LEA AX,TABLE 是把符号地址 TABLE 的有效地址(这里是偏移量)送到指定寄存器 AX 里,指 令执行完后,(AX)=0032H 11。执行完指令后,(AX)=1E00H 12。LEA AX,CSTRING MOV DL,AX MOV DH,AX+6 13。这个嘛不想做了,麻烦啊 14。LES BX,2000 MOV AX,ES:BX 注意:一开始我写的是:MOV AX,ES:8000H,后来看到题目里要求写两条指令,所以一条就不行了,就要画蛇添足 15。运算结果 SF,ZF,CF,OF各位的值(从左至右依次往下)(1)74D4H 0 0 0 0 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.(2)A5C1H 1 0 0 1 (3)4240 H 0 0 1 0 (4)0000 H 0 1 1 0 16。接上表 (1)5D14 0 0 0 0(2)A870 1 0 0 1(3)D870 1 0 0 0(4)34E4 0 0 1 0 17。(1).MOV AX,Z ;把 Z 送到 AX SUB AX,X ;Z-X ADD AX,W ;W+(Z-X)MOV Z,AX ;结果保存在 Z 中(2).MOV AX,R ;R 送到 AX 中 ADD AX,9 ;R+9 MOV BX,X ;X 送到 BX 中 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.ADD BX,6 ;X+6 ADD AX,BX ;(R+9)+(X+6),结果保存在 AX 中 MOV BX,W ;W 送到 BX 中 SUB BX,AX ;W-(R+9)-(X+6),连续减去两个数,相当于减去这两个数的和 MOV Z,BX ;最终结果送到 Z 中(3)MOV AX,W ;把 W 送到 AX IMUL X ;W*X 注意:低十六位保存在 AX 里,高十六位保存在 DX 里 MOV BX,Y ;把 Y 送到BX 里 ADD BX,6 ;Y+6 IDIV BX ;(W*X)/(Y+6)注意:商保存在 AX 里,余数保存在 DX 里 MOV Z,AX ;把商送到 Z中,MOV R,DX ;把余数 送到R 中(4)MOV AX,W ;把 W 送到 AX 中 SUB AX,X ;W-X CWD ;把 AX中的十六位带符号数扩展成为 32 位,低十六位保存在 AX 中,高十六位保 ;在 DX 中 MOV BX,5 ;把 5 送到 BX 中 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.IDIV BX ;(W-X)/5 被除数为 32 位,除数为 16 位 商为 16 位 IMUL Y ;上一步结果再乖以 Y,积为 32 位 MOV BX,2 ;把 2 送到 BX中 IMUL BX ;上一步乘法所得的积再乘以 2,各为 64 位 MOV Z,EAX ;把结果中低 32位放入 Z 双字单元中 MOV Z+4,EDX ;把结果中高 32 位放入Z+4双字单元中 18。指令 本条指令执行完后 AX 的内容 执行完后 CF,SF,ZF的值 MOV AX,1234H 1234H 0 0 0 MOV CL,4 1234H 0 0 0 ROL AX,CL 2341H 1 0 0 DEC AX 2340H 1 0 0 欢迎您阅读并下载本文档,本文档来源于互联网,如有侵权请联系删除!我们将竭诚为您提供优质的文档!.;.MOV CX,4 2340H 1 0 0 MUL CX 8918H 0 0 0 INT 20H 程序结束后,(AX)=8918H (DX)