欢迎来到冰点文库! | 帮助中心 分享价值,成长自我!
冰点文库
全部分类
  • 临时分类>
  • IT计算机>
  • 经管营销>
  • 医药卫生>
  • 自然科学>
  • 农林牧渔>
  • 人文社科>
  • 工程科技>
  • PPT模板>
  • 求职职场>
  • 解决方案>
  • 总结汇报>
  • ImageVerifierCode 换一换
    首页 冰点文库 > 资源分类 > DOCX文档下载
    分享到微信 分享到微博 分享到QQ空间

    微型计算机原理及应用.docx

    • 资源ID:9693208       资源大小:39.81KB        全文页数:31页
    • 资源格式: DOCX        下载积分:3金币
    快捷下载 游客一键下载
    账号登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录 QQ登录
    二维码
    微信扫一扫登录
    下载资源需要3金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP,免费下载
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    微型计算机原理及应用.docx

    1、微型计算机原理及应用第四章 汇编语言程序设计4-2 下列程序执行后,寄存器AX,BX,CX的内容分别是多少?D SEGMENT AT 0202H;定位数据段地址ORG 0202H ;定位偏移地址DA_WORD DW 20HMOV AX,DA_WORD ;(AX)=0020HMOV BX,OFFSET DA_WORD ;(BX)=0202HMOV CL,BYTE PTR DA_WORD ;(CL)=20H(将变量DA_WORD的属性改变为字节型)MOV CH,TYPE DA_WORD ;(CH)=2(变量类型数值) ;(CX)=0220H4-4 试编制一程序,把CHAR1中各小写字母分别转换为对

    2、应的大写字母,并存放在CHAR2开始的单元中(题目要求:不改变CHAR1的内容)方法1,小写字母转换一个输出显示一个,前3种方法均使用了AL寄存器D SEGMENT CHAR1 DB abcdefghijklmnopqrstuvwxyzN EQU $-CHAR1;变量必须先定义后使用,而不能相反CHAR2 DB N DUP(0) ; ;不能把此句与上一句对调,CHAR2 DB $-CHAR1有;的同学这样写,错在哪 D ENDS S SEGMENT STACK DB 200 DUP(0)S ENDS C SEGMENT ASSUME CS:C,DS:D,SS:S ;ASSUME是伪指令,后面不

    3、能写冒号 START: MOV AX,D MOV DS,AX ;MOV ES,AX ;只要用到串操作指令且DILEA SI,CHAR1 ;MOV SI,OFFSET CHAR1LEA DI,CHAR2 ; MOV DI,OFFSET CHAR2MOV CX,N ;$-CHAR1,不可以AGAIN:MOV AL,SISUB AL,20H ;AND AL,5FH 有的同学是这样实现的 MOV DI,AL MOV DL,ALMOV AH,2INT 21H ;从屏幕显示 INC SI INC DI LOOP AGAIN MOV AH,4CHINT 21H ; ;不是必须的C ENDS END STAR

    4、T方法2:使用通用数据传送指令MOVD SEGMENT CHAR1 DB abcdefghijklmnopqrstuvwxyzN EQU $-CHAR1;变量必须先定义后使用,而不能相反CHAR2 DB N DUP(0);不能把此句与上一句对调 D ENDS STACK SEGMENT STACK DB 200 DUP(0)STACK ENDS ;P126(代码段和堆栈段是不可少的)C SEGMENT ASSUME CS:C ,DS:D ,SS:S START: MOV AX,D MOV DS,AX MOV ES,AX ;只要用到串操作指令且DIMOV SI,0 ;LEA SI,CHAR1MO

    5、V DI,0 ;LEA DI,CHAR2MOV CX,NAGAIN: MOV AL,CHAR1SI ; MOV AL,SISUB AL,20H MOV CHAR2DI,AL ; MOV DI,AL INC SI INC DI LOOP AGAIN MOV AH,4CHINT 21H ;不是必须的C ENDS END START 第3种方法:使用串的读写指令LODSB STOSBD SEGMENT CHAR1 DB abcdefN EQU $-CHAR1 CHAR2 DB $-CHAR1 DUP(0) D ENDS STACK SEGMENT STACK DB 200 DUP(0)STACK E

    6、NDS ;P126(代码段和堆栈段是不可少的)C SEGMENT ASSUME CS:C,DS:D,SS:S START: MOV AX,D MOV DS,AX MOV ES,AX MOV SI,0 ;LEA SI,CHAR1MOV DI,0 ;LEA DI,CHAR2MOV CX,NCLD ;不写(隐含)也是0(递增)但不能STDAGAIN: LODSB ;执行一次,隐含修改SISUB AL,32 STOSB ;MOV DI,AL;执行一次, 隐含修改DI INC DI LOOP AGAIN ;LOOP指令只修改CX,不管SI,DIMOV AH,4CHINT 21H ;不是必须的C ENDS

    7、 END START 第四种方法2006级,没有显示使用MOVSB指令D SEGMENT CHAR1 DB abcdefghijklmnopqrstuvwxyzN EQU $-CHAR1CHAR2 DB N DUP(0) D ENDS S SEGMENT STACK DB 200 DUP(0)S ENDS C SEGMENT ASSUME CS:C,DS:D,SS:S START: MOV AX,D MOV DS,AX MOV ES,AX LEA SI,CHAR1 LEA DI,CHAR2 MOV CX,NAGAIN:MOVSB ; SUB SI,20H DEC DI ; MOVSB SUB

    8、BYTE PTRDI,20H ;LOOP ADAIN 错在哪里?结果如何? INC DI LOOP AGAIN MOV AH,4CH INT 21H C ENDS END START 方法5: 只用一个地址指针SI D SEGMENT CHAR1 DB abcdefghijklmnopqrstuvwxyzN EQU $-CHAR1CHAR2 DB N DUP(0) D ENDS S SEGMENT STACK DB 200 DUP(0)S ENDS C SEGMENT ASSUME CS:C,DS:D,SS:S START: MOV AX,D MOV DS,AX MOV ES,AX MOV S

    9、I,0 MOV CX,NAGAIN:MOV AL,CHAR1SI ;只用一个地址指针,SICHAR1是错误的 SUB AL,20H MOV CHAR2SI,AL INC SI LOOP AGAIN int 3 MOV AH,4CH INT 21H C ENDS END START 有的同学按数据是由键盘录入的来考虑的,也可行,程序中还有不少问题方法6:由键盘输入小写字母再转换输出,回车符也占一个字节,输入需要小写转换成大写字母的内容从输入串的第3个元素开始D SEGMENT A DBCHAR1,0DH,0AH,$ B DBCHAR2,0DH,0AH,$ CHAR1 DB 11,?,11 DUP

    10、(0);准备输入10个小写字母CHAR2 DB 10 DUP(0)D ENDS S SEGMENT STACK DB 200 DUP(0)S ENDS C SEGMENT ASSUME CS:C,DS:D,SS:S START: MOV AX,D MOV DS,AX MOV ES,AX MOV DX,OFFSET A MOV AH,9 INT 21H LEA DX,CHAR1 MOV AH,0AH INT 21H ;由键盘输入字符串,10个字母(显示),1个回车,共11个字节 LEA SI,CHAR12 LEA DI,CHAR2 MOV CX,10 ;需要转换的字符长度为10个字节AGAIN:

    11、MOV AL,SI SUB AL,20H MOV DI,AL INC SI INC DI LOOP AGAIN ; 将小写字母字符串转换成大写字母字符串 MOV BYTE PTRDI,0DH INC DI MOV BYTE PTRDI,0AH INC DI MOV BYTE PTRDI,$ ;必须指明数据类型 MOV DX,OFFSET CHAR2 MOV AH,9 INT 21H ;输出$结尾的大写字母字符串 int 3 MOV AH,4CH INT 21H C ENDS END START4-6在BUF地址处起,存放有100个字节的字符串,设其中有一个以上的“A”字符,编程查找出第一个“A

    12、”字符相对起始地址的距离,并将其存入LEN单元。方法1,经过调试,数据串长ND SEGMENT BUF DB qasdA%9F26HsdfhA$#12345678 DB DFGH234546JII2334JI5467OPPAVG DB ASDFG45667RTY ; 必须写实际的N EQU $-BUF;有同学写成N EQU BUFLEN DW 0;为变量LEN保留一个字,必须先定义后使用,LEN DW ?D ENDS S SEGMENT STACK ;应该将程序写完整 DB 200 DUP(0)S ENDSC SEGMENT ASSUME CS:C,DS:D,SS:S START: MOV A

    13、X,D MOV DS,AX MOV ES,AX ;这条指令是必须的 MOV CX,N LEA DI,BUF ;MOV DI,OFFSET BUF MOV AL,41H ;MOV AL,A REPNE SCASB ;有的同学用的比较指令 DEC DI ;不必判断是否找到,一定找到 MOV LEN,DI ;MOV LEN,DI错在哪里? MOV LEN,DI-1或MOV LEN,BYTE PTRDI错在哪里 ,MOV LEN,OFFSET BUFDI-1对不对 或LEA LEN,BUFDI-1 MOV AH,4CH INT 21HC ENDS END START 4-8 某程序设置的数据区如下所示

    14、,画出该数据段内容在内存中的存放形式(要用十六进制补码表示,按字节组织) DATA SEGMENT DB1 DB 12H,34H,0,56H DW1 DW 78H,90H,0AB46H,1234H ADR1 DW DB1 ;取变量DB1的偏移地址 ADR2 DW DW1 ;;取变量DW1的偏移地址 AAA DW $-DB1 ;计算当前变量到DB1变量的字节数 BUF DB 5 DUP(0) DATA ENDS有的同学认为0AB46H是负数,并取了它的补码 2 4-10 以BUF1和BUF2开头的2个字符串,其长度均为LEN,试编程实现: (1)将BUF1开头的字符串送到BUF2开始的内存空间。

    15、 (2)将BUF1开始的内存空间全部清零。经过调试的:方法1:数据段与附加段重叠,利用MOVSB指令实现数据传的复制D SEGMENTD1 DB BUF1QWE233459JKGHGFHGF;看清题目要求,写出实际内容对存储器初始化,分配内存空间,不能偷懒LEN DB $-D1;有同学写成N EQU LEND2 DB BUF2ASD33459JKGHGFHGFI;长度与D1相同D ENDSS SEGMENT STACKDB 200 DUP(0)S ENDSC SEGMENT ASSUME CS:C,DS:D,SS:S STAR: MOV AX,DMOV DS,AXMOV ES,AX ;附加段与

    16、数据段重叠,是允许的LEA SI,D1LEA DI,D2MOV CX,LENREP MOVSB LEA DI,D1MOV CX,LEN ;这条语句不能少MOV AL,00H ;MOV AX,0错在哪REP STOSBMOV AH,4CHINT 21HC ENDS END STAR经过调试的:方法2;数据段与附加段分开,串读一个写一个实现数据的传送,再利用串写指令使指定存储区清零D SEGMENT D1 DB BUF1qasdA%9F26HsdfhA$#12345678LEN EQU $-D1D ENDS E SEGMENTD2 DB BUF2abcdefghijklmnopqrstuvwxyz

    17、0 ; 必须写实际的,;与D1长度相同E ENDS S SEGMENT STACK DB 200 DUP(0)S ENDSC SEGMENT ASSUME CS:C,DS:D,SS:S START: MOV AX,D MOV DS,AX MOV AX,EMOV ES,AX MOV CX,N LEA SI,D1 ;MOV SI,OFFSET D1 LEA DI,D2 LP: LODSBSTOSBLOOP LP ;LOOP只是使CX减1,不改变SI DI LEA DI,D1 MOV CX,N ;这条语句不能少 MOV AL,00H REP STOSB MOV AH,4CH INT 21HC END

    18、S END START第3种做法:传送一个字节清零一个字节,再向下一个字节进行D SEGMENTD1 DB BUF1QWE233459JKGHGFHGF;看清题目要求,写出实际内容对存储器初始化,分配内存空间,不能偷懒LEN DB $-D1D2 DB BUF2ASD33459JKGHGFHGFI;长度与D1相同D ENDSS SEGMENT STACKDB 200 DUP(0)S ENDSC SEGMENT ASSUME CS:C,DS:D,SS:SSTAR: MOV AX,DMOV DS,AXMOV ES,AXLEA SI,D1LEA DI,D2MOV CX,LENNEXT:MOV AL,S

    19、IMOV DI,ALMOV SI,00HINC SIINC DILOOP NEXTMOV AH,4CHINT 21HCSEG ENDS END STAR方法4;4-10-4从键盘输入初值,并显示D SEGMENT BUF1 DB 101,?,101 DUP(0)BUF2 DB 100 DUP(0)BUF3 DB 100 DUP(0)A DB BUF1,0DH,0AH,$B DB BUF2,0DH,0AH,$D ENDS S SEGMENT STACK DB 200 DUP(0)S ENDSC SEGMENT ASSUME CS:C,DS:D,SS:S START: MOV AX,D MOV D

    20、S,AX MOV ES,AX MOV DX,OFFSET A MOV AH,9 INT 21H ;输出显示BUF1 MOV DX,OFFSET BUF1 MOV AH,0AH INT 21H ;键盘输入字符串 MOV CL,BUF1+1 ;实际输入的字符串长度送CL,取相应单元的内容不需加方括号 MOV CH,0 PUSH CX CLD LEA SI,BUF1+2 LEA DI,BUF2 REP MOVSB ;将输入的字符串传送到BUF2 MOV BYTE PTRDI,0DH INC DI MOV BYTE PTRDI,0AH INC DI MOV BYTE PTRDI,$;在BUF2末尾输入

    21、回车换行和$ MOV SI,OFFSET BUF3 MOV DI,OFFSET BUF1+2;取变量的偏移地址,不能加方括号 POP CX REP MOVSB ;用BUF3替换BUF1 MOV BYTE PTRDI,0DH INC DI MOV BYTE PTRDI,0AH INC DI MOV BYTE PTRDI,$;在BUF1末尾输入回车换行和$ MOV DX,OFFSET A MOV AH,9 INT 21H ;输出显示BUF1 MOV DX,OFFSET BUF1+2 MOV AH,9 INT 21H ;输出空格,因为BUF1已经清零了 MOV DX,OFFSET B MOV AH,

    22、9 INT 21H ;输出显示BUF2 MOV DX,OFFSET BUF2 MOV AH,9 INT 21H ;输出BUF2,即键盘输入的内容 MOV AH,4CH INT 21HC ENDS END START4-14 试编写一程序,找出BUF数据区中带符号数的最大数和最小数,把最大数放到BH单元,把最小数放到BL单元。D SEGMENT BUF DB 5,90,-45,100,99,,-12N EQU $-BUFD ENDS STACK SEGMENT STACK DB 200 DUP(0)STACK ENDSC SEGMENT ASSUME CS:C,DS:D,SS:S START:

    23、MOV AX,D MOV DS,AX MOV CX,N-1 MOV SI,0MOV BH,BUFSIMOV BL,BUFSIAGAIN: INC SICMP BH,BUFSIJGE NEXT ;JAE NEXT错(无符号数)MOV BH,BUFSI ABC: LOOP AGAIN ;这句不要也行NEXT: CMP BL,BUFSIJLE ABCMOV BL,BUFSI LOOP AGAIN C ENDS END START 4-16 若AL中的内容为2位压缩的BCD数68H,试编程:(1)将其拆开成非压缩的BCD数,高低位分别存入BH和BL中。 (2)将上述要求的2位BCD码变换成对应的ASC

    24、II码,并且存入CH和CL中。方法1,经过调试的D SEGMENTD1 DB 1,2,3D ENDSS SEGMENT STACK DB 10 DUP(?)S ENDSC SEGMENTASSUME CS:C,SS:S,DS:DSTAR:MOV AX,D MOV DS,AX MOV AL,68H MOV BH,AL AND AL,0FH MOV BL,AL ;(BL)是低位非压缩的BCD码 AND BH,0F0H ;(BH)将是高位非压缩的BCD码 MOV CL,4 SHR BH,CL ; (BH)是高位非压缩的BCD码 MOV CL,BL ADD CL,30H ;(CL)是低位ASCII码

    25、MOV CH,BH ADD CH,30H ; (CH)是高位ASCII码 MOV AH,4CH INT 21HC ENDSEND STAR方法2D SEGMENTD1 DB 1,2,3D ENDSS SEGMENT STACK DB 10 DUP(?)S ENDSC SEGMENTASSUME CS:C,SS:S,DS:DSTAR:MOV AX,D MOV DS,AX MOV SI,OFFSET D1 MOV DL,68H MOV AL,68H AND AL,0FH MUL BYTE PTRSI AAM ;乘法的ASCII码调整指令,P99 MOV BL,AL MOV BH,DL AND BH

    26、,0F0H MOV CL,4 SHR BH,CL MOV AL,BH MUL BYTE PTRSI AAM MOV BH,AL MOV CL,BL ADD CL,30H MOV CH,BH ADD CH,30HC ENDSEND STAR4-18试用子程序结构编写一程序:从键盘输入一个2位十进制的月份数(0112),然后显示出相应的英文缩写名。 提示:根据题目要求实现的功能,可编写用一个主程序MAIN分别调用几个子程序。(1) INPUT从键盘接收一个2位数,并把它转换为对应的二进制数。(2) LOCATE 把输入的月份数与其英文缩写名(如JAN,FEB,MAR,APP,MAY,JUN等)对应

    27、起来,制成一个字符表以便查找。(3) DISPLAY 将找到的缩写字母在屏幕上显示出来,显示可用DOS所提供的显示功能(INT 21H的09号功能)。方法1:与方法2的不同主要在数据表的制定D SEGMENT D1 DB Please input month from the keyboad,0DH,0AH,$D2 DB 3, ?,3 DUP(?);分配键盘输入缓冲区,回车符占一个字节,但实际输入的字符数中不包含它,即输入2位数至少需预留3个字节的空间,输入完成后,实际输入的字符数为2D3 DB ERROR,0DH,0AH,$MONTH0 DB JAN,0DH,0AH,$DB FEB ,0DH

    28、,0AH,$DB MAR ,0DH,0AH,$DB APP ,0DH,0AH,$DB MAY ,0DH,0AH,$DB JUN ,0DH,0AH,$DB JUL ,0DH,0AH,$DB AUG ,0DH,0AH,$DB SEP ,0DH,0AH,$DB OCT ,0DH,0AH,$DB NOV ,0DH,0AH,$DB DEC ,0DH,0AH,$D ENDS S SEGMENT STACK DB 200 DUP(0)S ENDSC SEGMENT ASSUME CS:C,DS:D,SS:S START:CLD MOV AX,D MOV DS,AX CALL INPUTCALL LOCATECALL DISPLAYMOV AH,4CHINT 21H INPUT PROC NEARLEA DX, D1 ;将D1表示的相对地址送DXMOV AH,9INT 21H ;显示Please input month from the keyboad并换行ww2:LEA DX,D2 ;输入月份MOV AH,0AHINT 21HLEA DI,D2 ;将D2表示的相对地址送DICMP byte ptr DI+1,2 JNE ww2 ;输入的如果不是二位数,是错误MOV AH,DI+2;输入的月份高字节(十位数)MOV AL,DI+3;输入的月份低字节(个位数)X


    注意事项

    本文(微型计算机原理及应用.docx)为本站会员主动上传,冰点文库仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰点文库(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于我们 - 网站声明 - 网站地图 - 资源地图 - 友情链接 - 网站客服 - 联系我们

    copyright@ 2008-2023 冰点文库 网站版权所有

    经营许可证编号:鄂ICP备19020893号-2


    收起
    展开