您好,欢迎访问三七文档
1-1(1)传统计算机:①控制器;②运算器;③存储器;④输入设备;⑤输出设备。现代计算机:①处理器;②存储系统;③输入输出系统。(2)直接控制硬件,易产生运行速度快,目标代码小的程序。(3)处理器中数量多,使用频率改,多种用途的一组寄存器。(4)后进先出。(5)6个状态标志:CF、AF、ZF、SF、PF、OF;3个控制标志位:DF、IF、TF。(6)左边最高位。(7)无。(8)字母大小写不同,但是表示同一个符号。(9)不被汇编。(10)源程序和目标代码,各种标识符的说明。1-2(1)√(2)×,属于专用寄存器(3)×,8个16位通用寄存器(4)√(5)×,不一样,原因见P25(6)√(7)×,4部分需要分隔符区别(8)√(9)×,程序终止代表程序执行结束,不意味汇编结束。汇编是将源程序翻译成目标模块代码的过程,源程序的最后必须有一条END伪指令表明汇编结束,END指令之后的任何内容不被汇编程序处理。(10)√1-3(1)1M=220BYTE(2)8(3)BX,CX,SI,DI,BP,SP(4)16,DL,DH(5)4,16(6)低4位地址全为0,64KB(7)段地址,偏移地址,IP(8)目录(9)操作码,地址码/操作数(10).ASM,目标模块,.EXE1-4见P21-5见P101-6(1)0FFF0H(2)417H(3)24500H(4)0BC777H1-7代码段:主要存放程序中的指令代码。数据段:主要存放当前运行程序所用的数据。堆栈段:指明当前运行程序所使用的堆栈区域。1-8见P4-P51-9见课件1-10见P25-P271-11见P16或者课件1-12见P17或者课件1-13FFH,Again,next,h_asscii1-14见P27或者课件2-1(1)没有,因为8位字节表示的范围:0~255(2)没有,都是46H(3)因为(34+67H)*3是常数(4)以避免与不能以数字开头的标识符混淆(5)不能,因为8位字节表示的范围:0~255(6)防止发生非法操作(7)寻找操作数存储的地址(8)有效地址直接包含在指令中(9)DS(10)不正确,因为类型不匹配2-2(1)√(2)×,小写字母排在大写字母之后(3)√(4)×,不一样多(5)√(6)√(7)×,没有对齐,因为0403H是奇数地址,不是偶数地址(8)√(9)√(10)√2-3(1)97,61,a(2)0DH,0AH(3)DB,OFFSET(4)8843H(5)DWORD,4,WORDPTR(6)3(7)立即数寻址,寄存器寻址,存储器寻址(8)寄存器寻址,立即数(9)4028H(10)DS,SS2-4(1)255(2)0(3)94(4)2392-5(1)00010010B(2)00100100B(3)01101000B(4)10011001B2-6(1)91(2)89(3)36(4)902-7(1)0B(2)01111111B(3)10000001B(4)11000111B2-8(1)8A36H,CF=0(2)4AE4H,CF=1(3)0AE10H,CF=0(4)0ECA9H,CF=12-9数码0~9:30H~39H大写字母A~Z:41H~5AH小写字母a~z:61H~7AH0DH:回车符CR,0AH:换行符LF2-10Datasegmentmy1bDB‘PersonalComputer’my2bDB20my3bDB14hmy4bDB00010100Bmy5wDW20DUP(?)my6cEQU100my7cEQUPersonalComputerDataends2-11DatasegmentNUM=5DATALISTDW-10,2,5,4,?Dataends2-122-13-movax,offsetmess;AX=114Hmovax,typebuff+typemess+typevard;AX=1+1+4=6movax,sizeofvarw+sizeofbuff+sizeofmess;AX=2*2+10*1+5*1=19movax,lengthofvarw+lengthofvard;AX=2+1=3-----0FFH0FBHo118H00Hl117H10Hl116H04He115H04Hmessh114H04H-113H--112H0FFH-111H04H-110H04H-10FH04H-10EH--10DH0FFH-10CH04H-10BH04Hbuff-10AH04H12H109H-34H108H0FFH56H107H46Hvard78H106H45H04H105H10Hvarb03H104H0AH56H103H43H78H102H42H12H101H41Hvarw34H100H2-14略2-15varDD12345678H12Hmovbx,wordptrvar;BX=5678Hmovcx,wordptrvar+2;CX=1234Hmovdl,byteptrvar;DL=78Hmovdh,byteptrvar+3;DH=12H34H56Hvar78H2-16P56图2-10和图2-112-17(1)立即数寻址(2)直接寻址(3)寄存器寻址(4)寄存器间接寻址(5)寄存器相对(6)寄存器相对寻址(7)基址变址寻址(8)相对基址变址寻址3-1(1)MOVSI,BYTEPTR250或者MOVAL,BYTEPTR250(2)DX与CL类型不匹配(3)堆栈的操作“后进先出”(4)MOVBX,OFFSET[SI]汇编时并不知道指令在执行时SI等于什么,所以是错误的(5)结果是0(6)目的操作数(7)大写=小写ANDDFH;D5位清0小写=大写OR20H;D5位置1大/小写=小/大写XOR20H;D5位求反(8)利用CF和OF结果判断(9)DX.AX(10)逻辑与运算规则类似于二进制的乘法。3-2(1)×,因为MOV指令不影响标志位(2)×,空操作指令NOP(=XCHGAX,AX)(3)×,堆栈是利用主存实现的,MOVBX,[BP+4]也是对的(4)√(5)√(6)×,ADD指令影响6个状态标志位,而INC指令不影响进位CF标志,影响其他状态标志位。(7)×,有符号数进行符号扩展,位数加长一倍,数值不变(8)×,CMP指令不保存结果(9)×,NOT指令不影响标志位(10)×,无符号数SHL指令左移一位,就是乘23-3(1)减少(-2)(2)DX,(SP)=(SP)+2(3)78894111(4)26H,PF=0,0BE26H,PF=0(5)0FF68H,SF=1(6)0FF98H(7)0000H(8)0,0,0(9)01234678H(10)CL,43-4(1)MOVAX,100(2)MOVBYTEPTRVAR,100(3)MOVAX,BX(4)MOVBYTEPTRVAR,AL(5)MOVDS,AX(6)MOVAX,WORDPTRVAR(7)MOVDS,WORDPTRVAR(8)MOVAX,DS(9)MOVWORDPTRVAR,DS3-5(1)类型不匹配(2)IP自动赋值(3)段寄存器不能直接赋值(4)段寄存器之间不能直接赋值(5)类型不匹配(6)目的操作数没有指明数据类型(7)MOVAX,[BX+DI](8)MOV指令中目的操作数不能为立即数3-6MOVAX,BXMOVBX,WORDPTR[DI]MOVWORDPTR[DI],AX3-7后进先出的主存结构,入栈指令:PUSH,出栈指令:POP3-8SP=4302H3-9执行结果:AL=12H如果不用XLAT指令,则用MOVAL,BYTEPTR[BX+AL]指令替换XLAT指令3-10P75-76或者见课件3-11(1)movax,80h;AX=80haddax,3;AX=83h,CF=0,SF=0addax,80h;AX=103h,CF=0,OF=0adcax,3;AX=106h,CF=0,ZF=0(2)movax,100;AX=100addax,200;AX=300,CF=0(3)movax,100;AX=100addal,200;AX=002Ch,CF=1注:100+200=64h+0C8h=[1]2Ch(4)moval,7fh;AL=7fhsubal,8;AL=77h,CF=0,SF=0subal,80h;AL=0f7h,CF=1,SF=1sbbal,3;AL=0f3h,CF=0,SF=03-12指令ALCFZFSFOFPFmoval,89h89h不变不变不变不变不变addal,al12h10011addal,9dh0afh00101cmpal,0bch(不保存结果)0afh10101subal,al00h01001decal(不影响CF)0ffh00101incal(不影响CF)00h010013-13(1)DX=11H,AX=0F00H(2)DX=00FFH,AX=0E000H3-14(1)ADDDX,BX(2)ADDAL,BYTEPTR[BX+SI](3)ADDWORDPTR[BX+0B2H],CX(4)ADDWORDPTRVAR,3421H(5)ADDAX,0A0H3-15;数据段buffer1DD12345678hbuffer2DD56781234h;代码段MOVAX,WORDPTRbuffer1MOVDX,WORDPTRbuffer1+2SUBAX,WORDPTRbuffer2SBBDX,WORDPTRbuffer2+23-16(1)movsi,10011100b;SI=9Chandsi,80h;SI=80horsi,7fh;SI=0FFhxorsi,0feh;SI=01h(2)movax,1010b;AX=00001010Bmovcl,2shrax,cl;AX=00000010B,CF=1shrax,1;AX=00000100B,CF=0andax,3;AX=00000000B,CF=0(3)movax,1011b;AX=00001011Bmovcl,2rolax,cl;AX=00101100B,CF=0rolax,1;AX=00010110B,CF=0orax,3;AX=00010111B,CF=0(4)xorax,ax;AX=0,CF=0,OF=0,ZF=1,SF=0,PF=13-17指令AXCFOFSFZFPFmovax,1470h1470h不变不变不变不变不变andax,ax1470h00000orax,ax1470h00000xorax,ax0000h00011notax(不影响标志位)0ffffh00011testax,0f0f0h(不保存结果)0ffffh001013-18AND复位某些位(同0与),不影响其他(同1与)OR置位某些位(同1或),不影响其他(同0或)XOR求反某些位(同1异或),不影响其他(同0异或)andbl,11110110b;BL中D0和D3清0,其余位不变orbl,00001001b;BL中D0和D3置1,其余位不变xorbl,00001001b;BL中D0和D3求反,其余位不变3-19;数据段bcddb92hasciidb?,?;代码段moval,bcdandal,0fhoral,30hmovascii,almovah,bcdmovcl,4shrah,clorah,30hmovascii+1,ah3-20运算公式:(VAR1*VAR2+VAR3-540)/VAR4运算结果:商存放在AX中,余数存放在DX中3-21X=7等效乘法指令如下:MOVX,7IMULX3-22MOVSI,AXMOVCL,4SHLSI,CLMOVBX,AXSHLBX,1SHLBX,1ADDAX,SIADDAX,BX3-23;数据段numdb6,7,7,8,3,0,0,0;被转换数字tabdb'67783000';代码表;代码段movcx,lengthofnum;CX=8movsi,offsetnum;SI=num的偏移地址,指向被转换的地址表movdi,offsettab;DI=tab的偏移地址,指向代码表again:movdl,[si];DL=被转换的数字xchgdl,[di];
本文标题:汇编语言课后答案
链接地址:https://www.777doc.com/doc-2279450 .html