微机原理第三章习题答案

合集下载

微机原理与接口技术第三章试题及答案

微机原理与接口技术第三章试题及答案

第三章3-1选择题1、MOVX A,@DPTR指令中源操作数的寻址方式是(B)(A)寄存器寻址(B)寄存器间接寻址(C)直接寻址(D)立即寻址2.ORG 0003HLJMP 2000HORG 000BHLJMP 3000H 当CPU响应外部中断0后,PC的值是(B)(A)0003H (B)2000H (C)000BH (D)3000H3.执行PUSH ACC指令,MCS-51完成的操作是(A)(A)SP+1 SP (ACC)(SP)(B)(ACC)(SP)SP-1 SP(B)(C)SP-1 SP (ACC)(SP) (D)(ACC)(SP)SP+1 SP4、LCALL指令操作码地址是2000H,执行完相子程序返回指令后,PC=(D)(C)2000H (B)2001H (C)2002H (D)2003H5、51执行完MOV A,#08H后,PSW的一位被置位(D)(A)(A)C (B)F0 (C)OV (D)P6、下面条指令将MCS-51的工作寄存器置成3区(B)(A)MOV PSW,#13H (B)MOV PSW,#18H(B)SETB PSW.4 CLR PSW.3 (d) SETB PSW.3 CLR PSW.47、执行MOVX A,DPTR指令时,MCS-51产生的控制信号是(C)(D)/PSEN (B)ALE (C)/RD (D)/WR8、MOV C,#00H的寻址方式是(A)(A)位寻址(B)直接寻址(C)立即寻址(D)寄存器寻址9、ORG 0000HAJMP 0040HORG 0040HMOV SP,#00H当执行完左边的程序后,PC的值是(C)(A)0040H (B)0041H (C)0042H (D)0043H10、对程序存储器的读操作,只能使用(D)(A)MOV指令(B)PUSH指令(C)MOVX指令(D)MOVC指令3-2判断题。

4.MCS-51的相对转移指令最大负跳距是127B。

微机原理第三章作业答案

微机原理第三章作业答案

3.1 简要分析8086的指令格式由哪些部分组成,什么是操作码?什么是操作数?寻址和寻址方式的含义是什么?8086指令系统有哪些寻址方式?【解答】8086的指令格式由操作码和操作数字段组成。

操作码:要完成的操作。

操作数:参与操作的对象。

寻址:寻找操作数或操作数地址的过程。

寻址方式:指令中给出的找到操作数或操作数地址采用的方式。

8086指令系统的寻址方式主要有立即数寻址、寄存器寻址、存储器寻址和I/O端口寻址。

其中,存储器寻址可进一步分为直接寻址、寄存器间接寻址、寄存器相对寻址、基址变址寻址、相对基址变址寻址;I/O端口指令IN和OUT使用的端口寻址方式有直接寻址和间接寻址。

3.2 设(DS)=2000H,(ES)= 2100H,(SS)= 1500H,(SI)= 00A0H,(BX)= 0100H,(BP)= 0010H,数据变量VAL的偏移地址为0050H,请指出下列指令的源操作数字段是什么寻址方式?它的物理地址是多少?(1) MOV AX,21H (2) MOV AX,BX (3) MOV AX,[1000H](4) MOV AX,VAL (5) MOV AX,[BX] (6) MOV AX,ES:[BX](7) MOV AX,[BP] (8) MOV AX,[SI] (9) MOV AX,[BX+10](10) MOV AX,VAL[BX] (11) MOV AX,[BX][SI] (12) MOV AX,VAL[BX][SI]【解答】(1)MOV AX,21H立即寻址,源操作数直接放在指令中(2)MOV AX,BX寄存器寻址,源操作数放在寄存器BX中(3)MOV AX,[1000H]直接寻址,EA = 1000H,PA =(DS)×10H+EA = 2000H×10H+1000H = 21000H(4)MOV AX,VAL直接寻址,EA = [V AL] = 0050H,PA =(DS)×10H+EA = 2000H×10H+0050H = 20050H(5)MOV AX,[BX]寄存器间接寻址,EA =(BX)= 0100H,PA =(DS)×10H+EA = 2000H×10H+0100H = 20100H(6)MOV AX,ES:[BX]寄存器间接寻址,EA =(BX)= 0100H,PA =(ES)×10H+EA = 2100H×10H+0100H = 21100H(7)MOV AX,[BP]寄存器间接寻址,EA =(BP)= 0010H,PA =(SS)×10H+EA = 1500H×10H+0010H = 15010H(8)MOV AX,[SI]寄存器间接寻址,EA =(SI)= 00A0H,PA =(DS)×10H+EA = 2000H×10H+00A0H = 200A0H(9)MOV AX,[BX+10]相对寄存器寻址,EA =(BX)+10D = 0100H+000AH= 010AH,PA =(DS)×10H+EA = 2000H×10H+010AH = 2010AH(10)MOV AX,VAL[BX]相对寄存器寻址,EA =(BX)+[V AL]= 0100H+0050H= 0150H,PA =(DS)×10H+EA = 2000H×10H+0150H = 20150H(11)MOV AX,[BX][SI]基址变址寻址,EA = (BX)+(SI)= 0100H+00A0H = 01A0H,PA = (DS)×10H +EA = 2000H×10H+01A0H = 201A0H(12)MOV AX,VAL[BX][SI]相对基址变址寻址,EA = (BX)+(SI)+[V AL]= 0100H+00A0H+0050H = 01F0H,PA =(DS)×10H+EA = 2000H×10H+01F0H = 201F0H3.3 给定寄存器及存储单元的内容为:(DS) = 2000H,(BX) = 0100H,(SI) = 0002H,(20100) = 32H,(20101) = 51H,(20102) = 26H,(20103) = 83H,(21200) = 1AH,(21201) = B6H,(21202) = D1H,(21203) = 29H。

微机原理第三章习题参考答案

微机原理第三章习题参考答案

第三章2、对于下列存储容量的存储器芯片⑴Intel 2114(1K×4bit)⑵Intel 2167(16K×1bit)⑶Zilog 6132(4K×8bit)各需要多少条地址线寻址?需要多少条数据线?若要组成64K×8bit的存储器,选同一芯片各需要几片?答:存储器芯片的存储容量=存储单元个数×每个存储单元存放的二进制信息位数。

存储单元个数决定了存储器芯片的地址线条数,地址线条数N=㏒2(存储单元个数),每个存储单元存放的二进制信息位数决定了存储器芯片的数据线条数,数据线条数M=每个存储单元存放的二进制信息位数。

∴⑴Intel 2114(1K×4bit)芯片,需要N=㏒2(210)=10条地址线寻址,需要M=4条数据线。

⑵Intel 2167(16K×1bit)芯片,需要N=㏒2(214)=14条地址线寻址,需要M=1条数据线。

⑶Zilog 6132(4K×8bit)芯片,需要N=㏒2(212)=12条地址线寻址,需要M=8条数据线。

若要组成64K×8bit的存储器,选上述同一芯片,则:⑴选Intel 2114(1K×4bit)芯片,需要64K×8bit÷(1K×4bit)=64×2 =128片;即位扩展需2片一组,字扩展需64组,共需128片。

⑵选Intel 2167(16K×1bit)芯片,需要64K×8bit÷(16K×1bit)=4×8 =32片;即位扩展需8片一组,字扩展需4组,共需32片。

⑶选Zilog 6132(4K×8bit)芯片,需要64K×8bit÷(4K×8bit)=16×1 =16片;即不需位扩展,字扩展需16组,共需16片。

3、用16K×4bit的SRAM芯片组成64K×8bit的存储器,要求画出该存储器组成的逻辑框图。

微机原理第三章习题答案

微机原理第三章习题答案

习题3答案1. 指出下列指令的错误原因。

(1) AND AX, DL ;类型不匹配(2) ADD CS, DX ;CS不能作为目的操作数(3) MOV AX, IP ;IP不能作为指令的操作数(4) MOV [BP][SI], [SI] ;两个操作数不能同时为内存操作数(5) SUB [BP][SI], ES:DX ;段超越前缀只能用在内存操作数之前(6) XCHG AL, [SI][DI] ;没有[SI][DI]这种操作数形式(7) JGE AX ;条件转移指令的操作数只能是标号(8) PUSH DL ;对堆栈不能进行字节操作2. 用一条指令将BX清0。

(请给出3种方法)方法1:MOV BX, 0方法2:SUB BX, BX方法3:AND BX, 0 ;将BX和0做与,可以将BX清零方法4:XOR BX, BX3. 写出实现下列功能的指令序列。

(1) 判断AX的值,若AX等于0,则转到标号LABEL处。

(请写出3种方法)方法1:CMP AX, 0JZ LABEL ; 如果ZF = 0,说明AX为0,因为CMP指令是做减法,但是不写回结果; 因此指令执行后AX内容不会受到破坏方法2:TEST AX, 0FFHJZ LABEL ; 如果ZF = 0,说明AX为0,TEST指令做与运算,可是不写回结果,只影响标志位。

; 和0与清零,和1与不变,所以和FFH做与的结果是AX本身,但是此时标志位已; 经改变了,所以可以利用标志位来判断,但是AX内容却没有受到任何破坏方法3:AND AX, 0FFH ;这个方法的原理和方法2其实是完全一致的JZ LABEL(2) 将AL的高4位与低4位分别放入AH与AL的低4位,并将AH与AL的高4位清0。

MOV AH, ALAND AL, 0FH ; AL高4位通过与清零,而低4位保持不变MOV CL, 4SHR AH, CL ; 这两条指令通过逻辑右移将AH的高4位清零,因为SHR在右移后,高位补零(3) 若AX和BX中的数恰好1个是奇数、1个是偶数,则将奇数放入AX,偶数放入BX;否则,AX和BX不变。

微机原理与接口技术习题答案3

微机原理与接口技术习题答案3

第3章8086CPU指令系统1.写出完成下列要求的变量定义语句:(1)在变量var1中保存6个字变量:4512H,4512,-1,100/3,10H,65530;(2)在变量var2中保存字符串:’BYTE’,’word’,’WOR’D;(3)在缓冲区buf1中留出100个字节的存储空间;(4)在缓冲区buf2中,保存5个字节的55H,再保存10个字节的240,并将这一过程重复7次;(5)在变量var3中保存缓冲区buf1的长度;(6)在变量pointer中保存变量var1和缓冲区buf1的偏移地址。

解:var1DW4512H,4512,-1,100/3,10H,65530var2DB’BYTE’,’word’,’WORD’buf1DB100DUP(?)buf2DB7DUP(5DUP(55H),10DUP(240))var3DBLENGTHbuf1pointerDWvar1,buf1(或者pointerDWOFFSETvar1,OFFSETbuf1)2.设变量var1的逻辑地址为0100:0000,画出下列语句定义的变量的存储分配图:var1DB12,-12,20/6,4DUP(0,55H)var2DB‘Assemble’var3DW‘AB’,‘cd’,‘E’var4DWvar2var5DDvar2解:3.指令正误判断,对正确指令写出源和目的操作数的寻址方式,对错误指令指出原因(设VAR1,VAR2为字变量,L1为标号):(1)MOVSI,100(2)MOVBX,VAR1[SI](3)MOVAX,[BX](4)MOVAL,[DX](5)MOVBP,AL(6)MOVVAR1,VAR2(7)MOVCS,AX(8)MOVDS,0100H(9)MOV[BX][SI],1(10)MOVAX,VAR1+VAR2(11)ADDAX,LENGTHVAR1(12)ORBL,TYPEVAR2(13)SUB[DI],78H(14)MOVSVAR1,VAR2(15)PUSH100H(16)POPCS(17)XCHGAX,ES(18)MOVDS,CS(19)JMPL1+5(20)DIVAX,10(21)SHLBL,2(22)MOVAL,15+23(23)MULCX(24)XCHGCL,[SI](25)ADCCS:[0100],AH(26)SBBVAR1-5,154解:(1)MOVSI,100正确。

微机原理作业与答案第三章

微机原理作业与答案第三章

8086第三章作业3-11在实模式下,若段寄存器中装入如下数值,试写出每个段的起始地址和结束地址(1)1000H 10000H-1FFFFH(2)1234H 12340H-2233FH(3)E000H E0000H-EFFFFH(4)AB00H AB000H-BAFFFH3-12对于下列CS:IP组合,计算出要执行的下条指令存储器地址。

(1)CS=1000H和IP=2000H 答:下条指令存储器地址:12000H(2)CS=2400H和IP=1A00H 答:下条指令存储器地址:25A00H(3)CS=1A00H和IP=B000H 答:下条指令存储器地址:25000H(4)CS=3456H和IP=ABCDH 答:下条指令存储器地址:3F12DH3-37 指出下列指令源操作数的寻址方式(1)MOV AX,1200H;立即数寻址(2)MOV BX,[1200H];直接寻址(3)MOV BX,[SI];变址寻址(4)MOV BX,[BX+SI+1200];相对基变址寻址(5)MOV [BX+SI],AL;寄存器寻址(6)ADD AX,[BX+DI+20H];相对基变址寻址(7)MUL BL ;寄存器寻址(8)JMP BX ;间接寻址(9)IN AL,DX ;寄存器间接寻址(10)INC WORD PTR[BP+50H] ;相对基址寻址小结:虽然对存储器的访问指令、输入/输出指令(IN指令和OUT指令)、跳转指令(JMP指令)都有直接寻址和间接寻址,但是形式是有很大差别的:1.直接寻址:(1)对于存储器的访问用方括号括起来的二进制数,如:MOV BX,[1200H](2)对于输入/输出指令(IN指令和OUT指令)用二进制数如:IN AX,8FH 又如: OUT 78H,AL(3)对于跳转指令(JMP指令)是以目标标号为直接地址的如: JMP ADDR12.间接寻址:(1)对于存储器的访问有分为基址寻址、变址寻址、基址加变址寻址以及带位移量的所谓相对基址寻址、相对变址寻址、相对基址加变址寻址如:MOV AX,[BP](2)对于输入/输出指令用DX做间接寻址寄存器如:IN AX,DX 又如: OUT DX,AL(3)跳转指令直接写明寄存器即可 (段内)如: JMP BX段间需组合:如: JMP DWORD PTR [BX+ADDR1]3-38指出8086/8088下列指令中存储器操作数地址的计数表达式。

微机原理 第三章答案

微机原理 第三章答案

第三章作业1答案思考题:1、简述80C51的指令寻址方式。

答:80C51的指令寻址方式有:寄存器寻址、立即寻址、寄存器间址、直接寻址、变址寻址、相对寻址、位寻址2、访问特殊功能寄存器SFR,可使用哪些寻址方式?答SFR只能直接寻址3、若访问外部RAM单元,可使用哪些寻址方式?答:外间RAM单元,只能通过MOVX指令进行寄存器间接寻址。

4、若访问内部RAM单元,可使用哪些寻址方式?答:片内RAM低128字节,可直接寻址、寄存器间接寻址。

(只能使用R0, R1作为间址寄存器。

片内RAM20~2FH单元,可以位寻址。

5、MOV、MOVC、MOVX指令有什么区别?分别用于哪些场合?答:MOV指令用于对内部RAM的访问。

MOVC指令用于对程序存储器的访问,从程序存储器中读取数据(如表格、常数等)。

MOVX指令采用间接寻址方式访问外部数据存储器,有Ri和DPTR两种间接寻址方式。

执行MOVX 指令时,在P3.7引脚上输出RD有效信号,或在P3.6 引脚上输出WR有效信号,可以用做外部数据存储器或I/O的读/写选通信号,与单片机扩展电路有关。

作业:1.给下段汇编语句加注释,汇编成机器语言,并说明该段程序的作用ORG 0000H 机器码MOV SP,#5FH ;栈顶指针指向内部RAM5FH单元C:0X0000 75815FMOV R7,#08H ;R7<- 08H,R7为计数器0X0003 7F08MOV R0,#3FH ;R0指向内部RAM3FH单元0X0005 783FCLOOP: POP ACC ; ACC<- (SP), SP<- SP-1 0X0007 D0E0 MOV @R0,A;把A中内容送入R0指向的单元(3FH)0X0009 F6DEC R0 ;R0<- R0-1 0X000A 18DJNZ R7,CLOOP ;R7<-R7-1 ,R7不为0跳转0X000B DFFASJMP $ ;原地踏步0X000D 80FE程序段作用:把内部RAM中58H-5FH单元的内容依次存入从38H-3FH的八个单元2.阅读下列程序,分析其功能。

微机原理第3章习题(答案)

微机原理第3章习题(答案)

微机原理第3章习题(答案)1.下列各条指令是否有错?如果有,请指出错误之处并改正(1)MOVDS 1000H(2)MOV[100],23H(3)ADDAX [BX + BP+ 6](4)PUSHDL(5)INAX, [3FH](6)0UT3FFH AL(7)LESSS [SI](8)POP[AX](9)IMUL4CH(10)SHLBX 5(11)INT300(12)XCHGD, 0FFFH答:(1)错误。

不允许直接向段寄存器送立即数,可改为:MOVAX 1000HMOVD, AX(2)错误。

该指令在语法上是对的,即可以把一个立即数送入一个存储单元;但是如果考虑实际编译,则第一操作数前应加上BYTEPT或WORDPT说明,否则汇编程序会因不能确定操作数长度而指示出错。

可改为:MOVBYTEPTR[1O0] 23H(3)错误。

不能同时使用两个基址寄存器BX、BP进行间接寻址,可改为:ADDAX [BX + DI + 6](4)错误。

堆栈操作应以字为单位进行,而DL是一个字节。

可改为:PUSHDX(5)错误。

在输入/输出指令中,8位端口地址应直接写在操作数处。

可改为:INAX, 3FH(6)错误。

端口地址3FFH已超出8位二进制表示范围,16位端口地址应用DX可改为:MOVD, 3FFHOUTDXAL(7)错误。

LES指令的目操作数应该是通用寄存器,不能是段寄存器。

可改为:LESBX [SI](8)错误。

AX不能用于间接寻址,间接寻址只能用BXBP、SI、DI四个寄存器之一。

可改为:POP[BX](9)错误。

立即数不能做乘法指令的操作数,可改为:MOVBJL 4CHIMULBL(10)错误。

当逻辑移位的次数大于1时,应该用CL指示次数。

可改为MOVCL 5SHLBX CL(11)错误。

操作数300>255,已超出有效的中断类型码范围。

(12)错误。

XCHG指令不允许立即数做它的操作数。

可改为:MOVC, 0FFFHXCHGDXCX2•请指出以下各指令的源、目的操作数所使用的寻址方式(1)MOVSI 2100H(2)SBBDISP[BX], 7(3)AND[DI] , AX(4)ORAX [609EH](5)MOV[BXb DI + 30H], CX(6)PUSHES [BP](7)CALL[DI]DISP(8)JNZShort_label答:(1)源操作数:立即数寻址;目的操作数:寄存器寻址(2)源操作数:立即数寻址;目的操作数:基址寻址(3)源操作数:寄存器寻址;目的操作数:寄存器间接寻址(4)源操作数:直接寻址;目的操作数:寄存器寻址5)源操作数:寄存器寻址;目的操作数:(带位移量的)基址变址寻址(6)源操作数:带段超越的寄存器间接寻址;目的操作数:隐含寻址(7)只有一个操作数,为变址寻址(8)只有一个操作数,为相对寻址3. 已知DS=2000H 有关的内存单元值为:(21000H)=00H,(21001H)=12H,(21200H)=00H,(21201H)=10H,(23200H)=20H,(23201H)=30H,(23400H)=40H,(23401H)=30H,(23600H)=60H,(23601H)=30H,符号COUNT 勺偏移地址为1200H。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

习题3答案1.指出下列指令的错误原因。

(1) AND AX, DL;类型不匹配(2) ADD CS, DX;CS不能作为目的操作数(3) MOV AX, IP;IP不能作为指令的操作数(4) MOV [BP][SI], [SI];两个操作数不能同时为内存操作数(5) SUB [BP][SI], ES:DX;段超越前缀只能用在内存操作数之前(6) XCHG AL, [SI][DI];没有[SI][DI]这种操作数形式(7) JGE AX;条件转移指令的操作数只能是标号(8) PUSH DL;对堆栈不能进行字节操作2.用一条指令将BX清0。

(请给出3种方法)方法1:MOV BX, 0方法2:SUB BX, BX方法3:AND BX, 0;将BX和0做与,可以将BX清零方法4:XOR BX, BX3.写出实现下列功能的指令序列。

(1)判断AX的值,若AX等于0,则转到标号LABEL处。

(请写出3种方法)方法1:CMP AX, 0JZ LABEL ;如果ZF = 0,说明AX为0,因为CMP指令是做减法,但是不写回结果;因此指令执行后AX内容不会受到破坏方法2:TEST AX, 0FFHJZ LABEL ;如果ZF = 0,说明AX为0,TEST指令做与运算,可是不写回结果,只影响标志位。

;和0与清零,和1与不变,所以和FFH做与的结果是AX本身,但是此时标志位已;经改变了,所以可以利用标志位来判断,但是AX内容却没有受到任何破坏方法3:AND AX, 0FFH ;这个方法的原理和方法2其实是完全一致的JZ LABEL(2)将AL的高4位与低4位分别放入AH与AL的低4位,并将AH与AL的高4位清0。

MOV AH, ALAND AL, 0FH ; AL高4位通过与清零,而低4位保持不变MOV CL, 4SHR AH, CL ;这两条指令通过逻辑右移将AH的高4位清零,因为SHR在右移后,高位补零(3)若AX和BX中的数恰好1个是奇数、1个是偶数,则将奇数放入AX,偶数放入BX;否则,AX和BX不变。

TEST AX, 01H ;TEST做与运算,通过与来检测AX的最低位JNZ CONTINUE ;如果ZF = 1,说明AX的最低位是0,那么AX中的数是偶数,就跳转,否则,;说明AX中的是奇数,而BX中的是偶数,符合结果要求,不用动了XCHG AX, BXCONTINUE :….4.分析下列指令序列完成什么功能。

MOV CL, 4SHL DX, CLMOV BL, AHSHLSHROR AX, CLBL, CLDL, BL答案:将DX.AX中的32位数整体逻辑左移4位。

5.给出下列各条指令执行后AL以及CF、OF、SF、和ZF的值。

指令AL CF OF SF ZF 备注MOV AL, 100XOR AL, AL 0010XOR后CF=OF=0,其余据结果设置MOV AL, -10010MOV指令不影响标志位INC AL 001INC不影响CF,其余据结果设置NOT AL 0FFH0001NOT指令不影响标志位SHL AL, 10FEH10SHL据移出的位设CF,据结果设SF,ZF,一位移动,据移位前后最高位是否变化设置,有变化OF = 1,无变化OF = 0CMP AL, 100FEH0010CMP指令根据结果设置6个标志位SUB AL, 7FH 7FH00SUB根据俄结果设置6个标志位SHL AL, 10FEH0110解释同上6.比较AX,BX和CX中无符号数的大小,将最小数放入AX中。

答案:CMP AX, BXJC BBB ;如果AX <= BX,跳转XCHG AX, BX ;否则,交换AX和BX的值,将两者中的小值放到AX中去BBB:CMP AX, CXJC CCC ;如果AX <= CX,跳转XCHG AX, CX ;否则,交换AX和CX的值,将两者中的小值放到CX中去CCC:INT 20H ;返回DOS7.变量定义伪指令与符号定义伪指令的主要作用是什么?答案:变量定义伪指令:主要用来为某种类型(比如字节型、字型)的内存单元的地址指定一个可以引用的名字标识。

符号定义伪指令:其实就是定义一个宏替换常量,用定义的符号代表一个文本串或者一个数值,在程序中遇到定义的符号时用相应的文本串或者数值去替换。

8.设有下列段定义:DSEG SEGMENTX DW 1, 3DSEG ENDS给出下列两组指令序列分别执行后AX的值。

(1) MOVAX, DSEGMOV DS, AXMOV AX, X+1(2) MOVAX, SEG XMOV ES, AXMOV AX, ES:XINC AX答案:(1)(AX) = 2(2)(AX) = 2备注:这两小段程序实现的功能是相同的,都是给子类型的变量X的值加1。

第二段程序采用了段超越方式来寻址操作数。

9.设有如下定义的数据段:DATA SEGMENTORGDW 1002 DUP(20), $ + 10‘100’, 501, 2, 2A9HBUF2–BUF1BUF1V1BUF1DBDDDWEQUDWENDSBUF2LENVADATA则V1+1中存放的字节数据为(0),V1+4中存放的字数据为(),VA的内容为(106/ 6AH),LEN的值为(8)。

10.在数据段定义的两个变量S1和S2,要求设计一个完整的程序,将以S1为首地址的50个字节依次传送到以S2为首地址的内存单元中。

File1.ASMdatasg segments1 db 25dup ('12')s2 db 50dup(0)datasg endscodesg segmentassume cs :codesg,start:mov ax, datasgmov ds, axmov es, axmov si, offset s1mov di, offset s2mov cx, 50rep movsbmov ax, 4c00hint 21hcodesg endsend start ds :datasg11.从键盘读入一个字符串(长度< 50),统计其字母、数字及其他字符的个数。

File2.asmdatasgbuff1countbuff2letters db 0digitsothersdatasgcodesg segmentassume cs:codesg, ds:codesg ;输入的字母个数;输入的数字个数;输入的其他字符的个数segmentdb 50db (?);最大能容纳的字符个数;实际输入的字符个数db 50 dup (?);实际字符缓冲区db 0db 0endsstart:mov ax, datasgmov ds, axmov dx, offset buff1;为0AH号系统功能调用准备输入参数DS: DX指向输入缓冲区的首地址mov ah, 0ahint 21hxor al, almov ch, 0mov cl, count ;CX中存放循环次数mov si, offset buff2;为lodsb准备源地址,DS:SI指向实际的字符串地址cldcheck:lodsb ;取一个数据到ALcmp al, 'A'jc x1cmp al, 'Z'jnc x1inc lettersjmp nextx1:cmp al, 'a'jc x2cmp al, 'z'jnc x2inc lettersjmp nextx2:cmp al, '1'jc x3;将字符串中的大写字母个数统计到letters变量中;将字符串中的小写字母个数统计到letters变量中cmp al, '9'jnc x3inc digits ;将字符串中的数字字符统计到digits变量中jmp nextx3:inc others ;统计其他字符个数next:loop checkmov ax, 4c00hint 21hcodesg endsend start12.设计一个程序,求10个无符号数中的最大值。

并将最大值存入变量MAX中。

File3.asmdatasg segmentarray db 20, 12, 16, 14, 13, 90, 45, 32, 67, 100;字节型数组max db 0datasg endscodesg segmentassume cs:codesg, ds: datasg start:mov ax, datasg mov ds, ax lea si, array mov cx, 10cldlodsbmov max, al dec cx next:lodsbcmp al, maxjc goonmov max, al goon:loop next mov ax,4c00h int 21h codesg endsend start ;数组首地址;数组元素个数;让地址值不断增大;将第一个数组元素放到AL中;取下一个数组元素到AL中;(al) <= max则max中的值不变;否则max = (al)。

相关文档
最新文档