ImageVerifierCode 换一换
格式:DOCX , 页数:23 ,大小:24.33KB ,
资源ID:10794895      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10794895.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第四章汇编语言源程序设计.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

第四章汇编语言源程序设计.docx

1、第四章汇编语言源程序设计第四章 汇编语言源程序设计1画出数据段汇编后相应存储单元中的内容并标出存储单元的逻辑地址。DATA SEGMENT ORG 0100HABC0 EQU 78HABC DB 09H,-2,45H, 2 DUP(01H,?),AB ABC1 DW -2, 34H+ABC0,$ ABC2 DD 12H ABC3 DW ABCDATA ENDS解:DS:0100HABC09HDS:0101HFEHDS:0102H45HDS:0103H01HDS:0104H-DS:0105H01HDS:0106H-DS:0107H41HDS:0108H42HDS:0109HABC1FEHDS:0

2、10AHFFHDS:010BHACHDS:010CH00HDS:010DH0DHDS:010EH01HDS:010FHABC212HDS:0110H00HDS:0111H00HDS:0112H00HDS:0113HABC300HDS:0114H01H2设程序中的数据定义如下: PARTNO DW ? PNAME DB 16 DUP(?) COUNT DD ? PLENTH EQU $-PARTNO问PLENTH的值为多少?它的含义是什么?解:PLENTH的值为22(16H)。表示当前位置与PARTNO之间有22个字节空间。3假设程序中的数据定义如下: LNAME DB 30 DUP(?) AD

3、DRESS DB 30 DUP(?) CITY DB 15 DUP(?) CODE_LIST DB 1,7,8,3,2(1)用一条MOV指令将LNAME的偏移地址放入AX;(2)用一条指令将CODE_LIST的头两个字节的内容放入SI:(3)写一条伪操作使CODE_LENGTH的值等于CODE_LIST域的实际长度。解:(1)MOV AX,OFFSET LNAME (2)MOV SI,WORD CODE_LIST (3)CODE_LENGTH EQU $-CODE_LIST4执行下列程序段后,AX、BX的内容各是什么?MOV AX,0001HMOV BX,8000HNEG AXMOV CX,4

4、AA:SHL AX,1RCL BX,1LOOP AAHLT 解:AX=0FFF0H,BX=000FH5阅读以下程序,回答问题DATA SEGMENTABC DB 90H,12H,43H,56H,04H,01HCOUNT EQU $-ABCRESULT DW ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:PUSH DS MOV AX,DATAMOV DS,AX XOR AX,AXMOV CX,COUNTLEA SI,ABCLEA DI,RESULTAA:MOV BL,SIINC SICMP BL,80HJC NEXT1NEG BLNEXT1:

5、ADD AL,BLADC AH,00HLOOP AAMOV DI,AXMOV AH,4CHINT 21H CODE ENDS END START (1)程序完成什么功能?(2)程序中NEG BL指令的作用是什么?(3)程序执行结束后RESULT字单元的内容是什么?(4)能否用MOV SI,OFFSET ABC代替程序中LEA SI,ABC指令?(5)汇编结束后符号COUNT的值是什么?解:(1)程序完成求一组有符号字节数的绝对值之和。 (2)程序中NEG BL指令的作用是求负数的绝对值。(3)程序执行结束后RESULT字单元的内容是0120H。(4)能。(5)汇编结束后符号COUNT的值是06

6、H。6阅读以下程序,回答问题DSEG SEGMENTARRAY DB 34H,56H,23H,70H,96HCOUNT EQU $-ARRAYDSEG ENDSSSEG SEGMENT PARA STACK STACKDB 256 DUP(0)SSEG ENDSCSEG SEGMENTASSUME CS:CSEG,DS:DSEG,SS:SSEGSTART:MOV AX,DSEGMOV DS,AXMOV SI,OFFSET ARRAYMOV CX,COUNTCLDNEXT: LODSBMOV BL,ALAND AL,0F0HPUSH CXMOV CL,4SHR AL,CL OR AL,30HCA

7、LL DISPMOV AL,BLAND AL,0FHOR AL,30HCALL DISPDEC CXJCXZ DONEMOV AL,2CH ;逗号的ASCII码为2CHCALL DISPJMP NEXTDONE:MOV AH,4CH ;终止当前进程,返回调用进程INT 21HDISP PROC NEARMOV AH,14 ;写字符到当前光标位置,光标前进一格INT 10HRET DISP ENDPCSEG ENDSEND START(1)程序执行结束后,屏幕上显示的内容是什么?(2)程序中带下划线的指令可以用什么指令替代(仅一条)?(3)程序中空格处应填入什么指令,才能保证程序按要求正常执行?

8、解:(1)程序执行结束后,屏幕上显示的内容是34,56,23,70,96。(2)程序中带下划线的指令可以用LEA SI,ARRAY指令替代。(3)程序中空格处应填入POP CX指令,才能保证程序按要求正常执行。7AX寄存器中存有4位压缩BCD码,试编写程序将这4位数字分开,并分别存入BH、BL、CH和CL寄存器中。解: 参考程序段如下:MOV DX,AXMOV CL,04HROL AX,CLAND DX,0F0FHMOV BL,DHMOV CL,DLAND AX,0F0FHMOV BH,ALMOV CH,AH8已知X、Y是字节型的无符号整数,编写程序计算。解:参考程序如下:DATA SEGME

9、NTX DB ? ;运行程序时取X分别位于两个分支Y DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AX MOV AL,X CMP AL,20 JNC NEXT MOV CL,03H SHR AL,CL JMP NEXT1NEXT:SUB AL,15NEXT1:MOV Y,ALMOV AH,4CH INT 21HCODE ENDSEND START9编写程序,统计寄存器BX中二进制位“1”的个数,结果存在AL中。解:参考程序如下:CODE SEGMENTASSUME CS:CODESTART: MO

10、V AL,00H MOV DX,BX MOV CX,16 AA: CMP DX,0 JZ NEXT SHL DX,1 JNC NEXT1 INC ALNEXT1: LOOP AANEXT: MOV AH,4CH INT 21HCODE ENDSEND START10编写程序段将计算机日期设置为2009年10月1日。解:参考程序段如下:MOV CX,2009H ;设置年MOV DH,10H ;设置月MOV DL,01H ;设置日MOV AH,2BHINT 21HHLT11编写程序实现接收一个字符的输入,并在屏幕上用二进制形式(0/1)显示出它的ASCII码值。解:参考程序如下:CODE SEGM

11、ENTASSUME CS:CODE,DS:DATASTART: MOV AH,01H ;键盘输入 INT 21H MOV BL,AL MOV CX,0007H SHL BL,1AA:SHL BL,1 JC NEXT1 MOV DL,0 JMP NEXTNEXT1:MOV DL,1NEXT: MOV AH,02H ;显示输出7位ASCII码值 INT 21H LOOP AA MOV AH,4CH INT 21HCODE ENDSEND START12设数据块存放在BUFFER开始的50个字节单元中,试编写程序统计数据块中正数(不包括0)的个数,并将统计的结果存放到NUMBER单元中。解:参考程序

12、如下:DATA SEGMENTBUFFER DB 23H,00H,56H,89H,09H,30H DB 98H,11H,07H,COUNT EQU $-BUFFERNUMBER DB 00HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV CX,COUNTLEA SI,BUFFERAA:MOV AL,SI CMP AL,00H JZ NEXT JS NEXT INC NUMBERNEXT:INC SILOOP AAMOV AH,4CH INT 21HCODE ENDSEND START13内存的一个

13、区域中有100个字符是用小写字母表示的,试编写一个程序,把它们转换成大写字母,并送屏幕显示。解:参考程序如下:DATA SEGMENTABC DB 61H,65H,62H,63H,;(100个小写字母)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXMOV CX,0064HLEA SI,ABCAA:MOV DL,SISUB DL,20H MOV SI,DL MOV AH,02H INT 21H INC SI LOOP AA MOV AH,4CH INT 21HCODE ENDSEND START14“98

14、76”是将输入数据字符“3268”通过密码表“3589027164”加密而得,编写解密程序,求任意输入四位密码的原码。解:参考程序如下:DATA SEGMENTABC DB 33H,35H,38H,39H,30H DB 32H,37H,31H,36H,34HABC1 DB 4DUP(00H)ABC2 DB 00HDATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXLEA SI,ABC1LEA DI,ABC2MOV CX,0004HAA: MOV AH,01H INT 21H MOV SI,AL INC SI

15、 LOOP AA LEA SI,ABC1 MOV DX,0000HMOV CX,0004HAA0: LEA BX,ABCAA1: MOV AL,SI CMP AL,BX JZ NEXT INC BX INC DL JMP AA1NEXT:PUSH CX CMP CX,01H JZ NEXT1 MOV CL,04H SHL DX,CLNEXT1:POP CX LOOP AA0 MOV DI,AXMOV AH,4CHINT 21HCODE ENDSEND START15在STRING单元开始存放着一字符串,字符串以“$”结束,试编制一程序测试该字符串中是否有数字09,如有则将CL中的第5位置1,否

16、则将该位清0。解:参考程序如下:DATA SEGMENTABC DB ABCDS9KL$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA SI,ABCMOV CL,00HAA: MOV AL,SICMP AL,$JZ NEXT1CMP AL,30HJC NEXTCMP AL,3AHJNC NEXTOR CL,20HJMP NEXT1NEXT: INC SI JMP AANEXT1: MOV AH,4CHINT 21HCODE ENDSEND START16编写程序完成把DX中的16进制数转换为ASC

17、II码,并将对应的ASCII码依次存入MEM开始的存储单元中。例如,当DX的内容为2A49H时,程序执行结束后,MEM单元开始的4个字节的内容依次为39H,34H,41H,32H。解:DATA SEGMENTMEM DB 4 DUP(?)DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV CH,04HMOV BX,OFFSET MEMMOV CL,04HAA1:MOV AX,DX AND AL,0FH ADD AL,30H CMP AL,3AH JC NEXT ADD AL,07HNEXT:MOV

18、BX,AL INC BX ROR DX,CL DEC CH JNZ AA1 MOV AH,4CH INT 21HCODE ENDSEND START17现有一个以“$”结尾的字符串,编写程序完成剔除字符串中的空格字符。解:参考程序如下:DATA SEGMENTABC DB ABC DS9KL$DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART:MOV AX,DATAMOV DS,AXLEA SI,ABCMOV BX,SIAA: MOV AL,SICMP AL,$JZ NEXTCMP AL,20H ;空格的ASCII码值为20HJZ NEXT1MOV

19、 AL,SIMOV BX,ALINC SIINC BXJMP AANEXT1:INC SI JMP AANEXT: MOV AH,4CHINT 21HCODE ENDSEND START18编一程序,在STRING开头的数据区中查找WE字符串,数据区以$符作为结束符号。如查到,给出HAVE FOUND提示;如查不到,给出NOT FOUND提示。解:参考程序如下:DATA SEGMENTSTRING DB ABCWE5$RE DB NOT FOUND$RE1 DB HAVE FOUND$ DATA ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA BEGIN:MO

20、V AX,DATA MOV DS,AX LEA SI,STRING AA: MOV AL,SI CMP AL,$ JZ NEXT CMP AL,W JNZ NEXT1 INC SI MOV AL,SI CMP AL,E JNZ AA LEA DX,RE1 JMP NEXT2 NEXT1:INC SI JMP AA NEXT:LEA DX,RE NEXT2:MOV AH,09H INT 21H MOV AH,4CH INT 21H CODE ENDS END BEGIN19设在A、B和C单元中分别存放着三个数,若三个数都不是0,则求出三数之和并存放在D单元中;若三个数中有一个为0,则把其余两个单

21、元也清0。试编写此程序。 解:参考程序如下:DATA SEGMENTA DB ?B DB ?C DB ? ;程序运行前修改A、B和C单元的内容D DB ?DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATASTART: MOV AX,DATAMOV DS,AXMOV AL,ACMP AL,00HJZ NEXTMOV AL,BCMP AL,00HJZ NEXTMOV AL,CCMP AL,00HJZ NEXTMOV AL,AADD AL,BADD AL,CMOV D,ALJMP NEXT1NEXT: MOV A,00H MOV B,00H MOV C,00HNE

22、XT1: MOV AH,4CH INT 21HCODE ENDSEND START20在以DA1为首地址的内存中有50个无符号字节数,编写程序统计其中素数的个数,结果以十进制形式在屏幕上显示。要求分别用子程序完成素数个数统计及十进制数显示。解:分析: 素数,又称质数,是这样的整数:它除了能表示为它自己和1的乘积以外,不能表示为任何其他两个整数的乘积。判断一个整数是否为素数的方法:用这个数除以2到它本身,如果只能被它本身整除则为素数。参考程序如下:DATA SEGMENTttl db Total number of prime number(s): $ten dw 10pcount db 0da

23、1 dB 1,2,3,4,5,6,7,8,9,10dB 11,12,13,14,15,16,17,18,19,20dB 21,22,23,24,25,26,27,28,29,30dB 31,32,33,34,35,36,37,38,39,40dB 41,42,43,44,45,46,47,48,49,50DATA ENDSCODE SEGMENTASSUME CS:CODE,DS:DATAmain: mov ax,datamov ds,axlea si,da1mov di,50 ;用 di 做主循环计数器cldm_1: lodsb ;从ds:si取一个无符号整数到axcall isprimej

24、nc m_2inc pcountcall printax ;是素数则输出ax里的十进制数mov dl,9 ;用制表符分隔call putcm_2: dec dijnz m_1 ;50个数完成?mov dx,offset ttl ;输出素数总数call putsmov al,pcount ;输出素数总数xor ah,ahcall printaxmov ah,4chint 21hisprime proc cbwtest ax,1 ;是否为偶数jnz ip_1 ;若是偶数直接返回ip_0: clc ;CF=0表示是合数retip_1: cmp ax,1 ;1或0?jbe ip_0 ;不是素数cmp

25、ax,3je ip_4 ;3是素数直接返回mov cx,3 ;从3开始循环ip_2: mov bx,ax ;留个副本在bx里xor dx,dx ;为除法清除dxdiv cxmov ax,bx ;恢复ax里的数or dx,dx ;余数为0否jz ip_0 ;为0为合数add cx,3 ;本来是除数加2,只尝试除数为奇数的情况即可,直接加3是为了比较cx是否以及到了ax-1cmp cx,axjb ip_3 ;若cx高于或等于ax,说明除数已经尝试到了n-1,ax是素数,直接返回,否则继续到ip_3ip_4: stc ;CF=1表示是素数retip_3: dec cx ;cx-1才是真正下个要尝试的除数jmp ip_2 ;继续试isprime endpputs procmov ah,9int 21hretputs endpputc procmov ah,2int 21hretputc endpprintax procxor dx,dxdiv tenmov cx,axor cx,dx ;若商与余数都为0则结束递归jz p_1push dx ;留存DX中的余数以在递归后输出call printax ;递归pop dx ;从最高位开始恢复余数add dl,0 ;原来的输出语句add一下就好了call putcp_1: retprintax endpCODE ENDSend main

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1