微机原理第四章余春暄答案微机原理作业与答案第四章.docx

上传人:b****1 文档编号:2872407 上传时间:2023-05-04 格式:DOCX 页数:14 大小:17.50KB
下载 相关 举报
微机原理第四章余春暄答案微机原理作业与答案第四章.docx_第1页
第1页 / 共14页
微机原理第四章余春暄答案微机原理作业与答案第四章.docx_第2页
第2页 / 共14页
微机原理第四章余春暄答案微机原理作业与答案第四章.docx_第3页
第3页 / 共14页
微机原理第四章余春暄答案微机原理作业与答案第四章.docx_第4页
第4页 / 共14页
微机原理第四章余春暄答案微机原理作业与答案第四章.docx_第5页
第5页 / 共14页
微机原理第四章余春暄答案微机原理作业与答案第四章.docx_第6页
第6页 / 共14页
微机原理第四章余春暄答案微机原理作业与答案第四章.docx_第7页
第7页 / 共14页
微机原理第四章余春暄答案微机原理作业与答案第四章.docx_第8页
第8页 / 共14页
微机原理第四章余春暄答案微机原理作业与答案第四章.docx_第9页
第9页 / 共14页
微机原理第四章余春暄答案微机原理作业与答案第四章.docx_第10页
第10页 / 共14页
微机原理第四章余春暄答案微机原理作业与答案第四章.docx_第11页
第11页 / 共14页
微机原理第四章余春暄答案微机原理作业与答案第四章.docx_第12页
第12页 / 共14页
微机原理第四章余春暄答案微机原理作业与答案第四章.docx_第13页
第13页 / 共14页
微机原理第四章余春暄答案微机原理作业与答案第四章.docx_第14页
第14页 / 共14页
亲,该文档总共14页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

微机原理第四章余春暄答案微机原理作业与答案第四章.docx

《微机原理第四章余春暄答案微机原理作业与答案第四章.docx》由会员分享,可在线阅读,更多相关《微机原理第四章余春暄答案微机原理作业与答案第四章.docx(14页珍藏版)》请在冰点文库上搜索。

微机原理第四章余春暄答案微机原理作业与答案第四章.docx

微机原理第四章余春暄答案微机原理作业与答案第四章

微机原理第四章余春暄答案【微机原理作业与答案第四章】

第四章汇编语言程序设计

4-2下列程序执行后,寄存器AX,BX,CX的内容分别是多少?

ORG0202H

DA_WORDDW20H

MOVAX,DA_WORD;(AX)=0020H

MOVBX,OFFSETDA_WORD;(BX)=0202H(BX)=0,这是

MOVCL,BYTEPTRDA_WORD;(CL)=20H(因PTR,则字的第

一字节)

MOVCH,TYPEDA_WORD;(CH)=2(变量类型数值)

;(CX)=0220H

4-4试编制一程序(不是程序段),把CHAR1中各小写字母分

别转换为对应的大写字母,并存放在CHAR2开始的单元中

DDD0SEGMENT

CHAR1DB‘abcdef’

NEQU$-CHAR1;变量必须先定义后使用,而不能

相反

CHAR2DBNDUP(0);不能把此句与上一句对调DDD0ENDS

STACKSEGMENTSTACK

DB200DUP(0)

STACKENDS;P126(代码段和堆栈段是不可少的)

CSEGSEGMENTASSUMECS:

CSEG,DS:

DDD0,SS:

STACKSTART:

MOVAX,DDD0

MOVDS,AX;MOVDX,AX?

?

?

MOVES,AX;只要SI,DI都用

MOVSI,0;LEASI,CHAR1

MOVDI,0;LEADI,CHAR2

MOVCX,N

AGAIN:

MOVAL,CHAR1[SI];MOVAL,[SI]

SUBAL,20H

MOVCHAR2[DI],AL;MOV[DI],AL

MOVDL,AL;不是必须的,但做实验是有用的。

MOVAH,2

INT21H

INCSI

INCDILOOPAGAINMOVAH,4CHINT21H;不是必须的CSEGENDSENDSTART

第二种方法:

DDD0SEGMENT

CHAR1DB‘abcdef’

NEQU$-CHAR1

CHAR2DBNDUP(0)DDD0ENDS

STACKSEGMENTSTACK

DB200DUP(0)

STACKENDS;P126(代码段和堆栈段是不可少的)

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DDD0,SS:

STACK

START:

MOVAX,DDD0

MOVDS,AX

MOVES,AX

LEASI,CHAR1

LEADI,CHAR2

MOVCX,N

CLD;不写(隐含)也是0(递增)但不能STD

AGAIN:

LODSB;执行一次,隐含修改SI

SUBAL,32

stosb;MOV[DI],AL;执行一次,隐含修改DI

nop;INCDI

LOOPAGAIN;LOOP指令只修改CX,不管SI,DI

MOVAH,4CH

INT21H;不是必须的

CSEGENDS

ENDSTART

4-6在BUF地址处起,存放有100个字节的字符串,设其中有一个以上的“A”字符,编程查找出第一个“A”字符相对起始地址的距离,并将其存入LEN单元。

方法1DDD0SEGMENTBUFDB‘qasdA%^9F26HsdfhA$#12345678’

DB‘DFGH234546JII2334JI5467OPPAVG’

DB‘ASDFG45667RTY’;必须写实际的

LENDW?

;为变量LEN保留一个字DDD0ENDS

STACKSEGMENTSTACK

DB200DUP(0)

STACKENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DDD0,SS:

STACK

START:

MOVAX,DDD0

MOVDS,AX

MOVES,AX

MOVCX,100

LEADI,BUF;MOVDI,OFFSETBUF

MOVAL,‘A’

REPNESCASB

DECDI;不必判断是否找到,一定找到

MOVLEN,DI;MOVBX,OFFSETLENMOV[BX],DI

MOVAH,4CH

INT21H

CSEGENDS

ENDSTART

4-8某程序设置的数据区如下所示,画出该数据段内容在内存中的存放形式(要

用十六进制补码表示,按字节组织)DATASEGMENTDB1DB12H,34H,0,56HDW1DW78H,90H,0AB46H,1234H0004HDW1ADR1DWDB1ADR2DWDW1AAADW$-DB1BUFDB5DUP(0)DATAENDS

000CHADR1

000EHADR20010HAAA

0012HBUF

0000HDB1

4-10以BUF1和BUF2开头的2个字符串,其长度均为LEN,试编程实现:

(1)DDD0SEGMENT

BUF1DB‘QWE233459JKGHGFHGF’

BUF2DB‘ASD33459JKGHGFHGFI’

LENEQULENGTHBUF2;DB$-BUF2DDD0ENDS

STACKSEGMENTSTACK

DB200DUP(0)

STACKENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DDD0,SS:

STACKSTART:

CLD

MOVAX,DDD0

MOVDS,AX

MOVES,AX

MOVCX,LEN

LEASI,BUF1;MOVSI,OFFSETBUF1

LEADI,BUF2;MOVDI,OFFSETBUF2

REPMOVSB

CSEGENDS

ENDSTART

(2)

DDD0SEGMENTBUF1DB‘QWE233459JKGHGFHGF’

LENEQULENGTHBUF1DDD0ENDS

STACKSEGMENTSTACK

DB200DUP(0)

STACKENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DDD0,SS:

STACK

START:

CLD

MOVAX,DDD0

MOVDS,AX

MOVCX,LEN

MOVAL,0

LEADI,BUF1;MOVDI,OFFSETBUF1

LLL:

STOSB

DECCX

JNZLLLCSEGENDS

ENDSTART

第二种做法:

DSEGMENT

BUF1DB‘QWE233459JKGHGFHGF’

BUF2DB‘ASD33459JKGHGFHGFI’

DENDS

STACKSEGMENTSTACK

DB200DUP(0)

STACKENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

D,SS:

STACK

BG:

MOVAX,D

MOVDS,AX

MOVES,AX

LEASI,BUF1

LEADI,BUF2

MOVCX,LEN

NEXT:

MOVAL,[SI]

MOV[DI],AL

MOV[SI],00H

INCSI

INCDI

LOOPNEXT

MOVAH,4CH

INT21H

CSEGENDS

ENDBG

4-14`试编写一程序,找出BUF数据区中带符号数的最大数和最小数,把最大数放到BH单元,把最小数放到BL单元。

DDD0SEGMENTBUFDB5,90,-45,100,99,„„„,-12

NEQU$-BUF

DDD0ENDS

STACKSEGMENTSTACK

DB200DUP(0)

STACKENDS

CSEGSEGMENT

ASSUMECS:

CSEG,DS:

DDD0,SS:

STACK

START:

MOVAX,DDD0

MOVDS,AX

MOVCX,N-1

MOVSI,0

MOVBH,BUF[SI]

MOVBL,BUF[SI]

AGAIN:

INCSI

CMPBH,BUF[SI]

JGENEXT;JAENEXT错(无符号数)

MOVBH,BUF[SI]

LOOPAGAIN

JMPSTOP

NEXT:

CMPBL,BUF[SI]

JLEABC

MOVBL,BUF[SI]

ABC:

LOOPAGAIN

STOP:

MOVAH,4CH

INT21H

CSEGENDS

ENDSTART

4-16若AL中的内容为2位压缩的BCD数68H,试编程:

(1)

将其拆开成非压缩的BCD数,高低位分别存入BH和BL中。

(2)将上述要求的2位BCD码变换成对应的ASCII码,并且存入CH和CL中。

(1)

STACKSEGMENTSTACK

DB200DUP(0)

STACKENDS

CSEGSEGMENT

ASSUMECS:

CSEG,SS:

STACK

START:

MOVBL,AL;而不是AX

ANDBL,0FH

MOVBH,AL

ANDBH,0F0H

MOVCL,4

SHRBH,CL(逻辑右移)

CSEGENDS

ENDSTART

(2)

STACKSEGMENTSTACK

DB200DUP(0)

STACKENDS

CSEGSEGMENT

ASSUMECS:

CSEG,SS:

STACK

START:

ADDBL,30H

MOVCL,BL

ADDBH,30H

MOVCH,BH

ENDS

STACKSEGMENTSTACK

DB200DUP(0)

STACKENDS

CSEGSEGMENT

ASSUMECS:

CSEG,SS:

STACK

START:

MOVBL,AL

ANDBL,0FH;(BL)是低位非压缩的BCD码

MOVDL,BL

ADDDL,30H;(DL)是低位ASCII码

MOVBH,AL;(BH)将是高位非压缩的BCD码ANDBH,0F0H

MOVCL,4

SHRBH,CL;(BH)是高位非压缩的BCD码

MOVCH,BH

ADDCH,30H;(CH)是高位ASCII码

MOVCL,DL;(CL)是低位ASCII码

CSEGENDS

4-18试用子程序结构编写一程序:

从键盘输入一个2位十

进制的月份数(01~12),然后显示出相应的英文缩写名。

提示:

根据题目要求实现的功能,可编写用一个主程序MAIN分别调用几个子程序。

(1)INPUT从键盘接收一个2位数,并把它转换为对应的

二进制数。

(2)LOCATE把输入的月份数与其英文缩写名(如JAN,

FEB,MAR,APP,MAY,JUN等)对应起来,制成一个字

符表以便查找。

(3)DISPLAY将找到的缩写字母在屏幕上显示出来,显

示可用DOS所提供的显示功能(INT21H的09号功能)。

DDD0SEGMENT

D1DB"Pleaseinputmonthfromthe

keyboad",0DH,0AH,"$"

D2DB3,?

3DUP(?

)ENDSTART

D3DB"ERROR",0DH,0AH,"$"

MONTH0DB"JAN",0DH,0AH,"$"

DB"FEB",0DH,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,"$"

DDD0ENDS

STACKSEGMENTSTACK

DB200DUP(0)

STACKENDS

CSEGSEGMENTASSUMECS:

CSEG,DS:

DDD0,SS:

STACKSTART:

CLD

MOVAX,DDD0

MOVDS,AX

CALLINPUT

CALLLOCATE

CALLDISPLAY

MOVAH,4CH

INT21H

CSEGENDS;不可少

ENDSTART

INPUTPROCNEAR

LEADX,D1;将D1表示的相对地址送DX

MOVAH,9

INT21H;显示‘Pleaseinputmonthfromthekeyboad’并换行

ww2:

LEADX,D2;输入月份

MOVAH,0AH

INT21H

LEADI,D2;将D2表示的相对地址送DI

CMPbyteptr[DI+1],2JNEww2;输入的如果不是二位数,是错误,重新输入

MOVAH,[DI+2];输入的月份高字节(十位数)

MOVAL,[DI+3];输入的月份低字节(个位数)

XORAX,3030H;将ASCII码变成BCD码

MOVBX,AX

MOVAL,BH

movdl,0ah

MULdl;变成二进制数

MOVBH,AL

MOVAL,BL;输入的月份低字节(个位数)

ADDAL,BH

RET

INPUTENDP

LOCATEPROCNEAR

DECAL;

CMPAL,0CH

JNCERROR;≥12(原13),输入错误

MOVBL,06H

MULBL

MOVAH,0

MOVSI,Ax;AX里放的是月份-1

MOVDX,wordptrMONTH0[SI];制成一个字符表以便查找。

ret

ERROR:

LEADX,D3;将D3表示的相对地址送DXRET

LOCATEENDP

DISPLAYPROCNEAR

MOVAH,09H;将找到的缩写字母在屏幕上显示出来

INT21H

RET

DISPLAYENDP

CSEGENDS

ENDSTART

关于串操作指令与循环指令的说明:

1.串操作指令MOVSB/MOVSW、CMPSB/CMPSW、

SCASB/SCASW、LODSB/LODSW、STOSB/STOSW每执行一次,指针(SI、DI)都自动±1或±2,但这条指令不管计数器CX的修改。

2.串操作指令的重复前缀REP(无条件重复)、

REPE/REPZ(当相等/为0时重复)、REPNE/REPNZ(当不相等/不为0时重复),每重复一次,计数器CX自动减1/减2。

3.循环指令LOOP(循环)、LOOPE/LOOPZ(等于/结果为0循环)、LOOPNE/LOOPNZ(不等于/结果不为0循环):

每循环一次,计数器CX都自动减1,并且,CX

为0时退出循环的一个条件。

但这些指令不管数据指针(SI、DI)的修改。

注意:

第三章作业和第四章作业的要求区别:

第三章作业是编写程序段,不必按段结构写;

第四章作业是编写程序,必须按段结构写

有的同学的作业太潦草.

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 工程科技 > 纺织轻工业

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

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