习题4Word下载.docx

上传人:b****4 文档编号:7866851 上传时间:2023-05-09 格式:DOCX 页数:25 大小:23.58KB
下载 相关 举报
习题4Word下载.docx_第1页
第1页 / 共25页
习题4Word下载.docx_第2页
第2页 / 共25页
习题4Word下载.docx_第3页
第3页 / 共25页
习题4Word下载.docx_第4页
第4页 / 共25页
习题4Word下载.docx_第5页
第5页 / 共25页
习题4Word下载.docx_第6页
第6页 / 共25页
习题4Word下载.docx_第7页
第7页 / 共25页
习题4Word下载.docx_第8页
第8页 / 共25页
习题4Word下载.docx_第9页
第9页 / 共25页
习题4Word下载.docx_第10页
第10页 / 共25页
习题4Word下载.docx_第11页
第11页 / 共25页
习题4Word下载.docx_第12页
第12页 / 共25页
习题4Word下载.docx_第13页
第13页 / 共25页
习题4Word下载.docx_第14页
第14页 / 共25页
习题4Word下载.docx_第15页
第15页 / 共25页
习题4Word下载.docx_第16页
第16页 / 共25页
习题4Word下载.docx_第17页
第17页 / 共25页
习题4Word下载.docx_第18页
第18页 / 共25页
习题4Word下载.docx_第19页
第19页 / 共25页
习题4Word下载.docx_第20页
第20页 / 共25页
亲,该文档总共25页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

习题4Word下载.docx

《习题4Word下载.docx》由会员分享,可在线阅读,更多相关《习题4Word下载.docx(25页珍藏版)》请在冰点文库上搜索。

习题4Word下载.docx

REPSTOSW

【答】将CS中起始地址为0100h的256个字节单元清零。

2).MOVAL,08H

SALAL,01H;

(AL)=00010000H

MOVBL,AL

MOVCL,02H

SALAL,CL;

(AL)=01000000H

ADDAL,BL;

(AL)=01010000H

本程序实现了什么功能?

【答】(AL*2+AL*8)。

4.3试分析下列程序完成什么功能?

MOVDX,3F08H

MOVAH,0A2H

MOVCL,4

SHLDX,CL;

(DX)=F080H

MOVBL,AH

SHLBL,CL;

(BL)=20H

SHRBL,CL;

(BL)=02H

ORDL,BL;

(DL)=82H

【答】将3f08h的’8’存放在dl的高四位,0a2h的’2’存放在dl的低四位。

4.4已知程序段如下:

MOVAX,1234H

ROLAX,CL

DECAX

MOVCX,4

MULCX

试问:

(1)每条指令执行后,AX寄存器的内容是什么?

(2)每条指令执行后,CF,SF及ZF的值分别是什么?

(3)程序运行结束时,AX及DX寄存器的值为多少?

【答】MOVAX,1234H;

(AX)=1234HCF=SF=ZF=0

ROLAX,CL;

(AX)=2341HCF=1,SF=ZF=0

DECAX;

(AX)=2340HCF=1,SF=ZF=0

MOVCX,4;

MULCX;

(AX)=8000HCF=ZF=0,SF=1,DX=0

4.5试分析下列程序段:

ADDAX,BX

JNCL2

SUBAX,BX

JNCL3

JMPSHORTL5

如果AX、BX的内容给定如下:

AXBX

(1)14C6H80DCH(程序转向L2)

(2)B568H54B7H(程序转向SHORTL5)

问该程序在上述情况下执行后,程序转向何处?

【答】

(1)程序转向L2。

(2)程序转向SHORTL5。

4.6以下为某个数据段,试问各个变量分别占多少字节,该数据段共占多少字节?

DATASEGMENT

VAR1DW9;

2字节

VAR2DD10DUP(?

),2;

44字节

VAR3DB2DUP(?

,10DUP(?

));

22字节

VAR4DB‘HOWAREYOU'

;

11字节

DATAENDS

【答】该数据段共占79字节。

4.7下列语句在存储器中分别为变量分配多少字节空间?

并画出存储空间的分配图。

VAR1DB10,2;

VAR2DW5DUP(?

),0;

12字节

VAR3DB‘HOWAREYOU?

'

,‘$'

;

13字节

VAR4DD-1,1,0;

Var1

Var2

Var3

Var4

10

?

FFH

2

U

00H

O

Y

01H

E

R

A

W

H

$

4.8编写一段程序,比较两个5字节的字符串OLDS和NEWS,若相同,在RESULT置0,否则置0FFH。

【答】参考程序:

OLDSDB1,2,3,4,5

NEWSDB1,2,3,4,5

RESULTDB?

MOVSI,OFFSETOLDS

MOVDI,OFFSETNEWS

MOVCX,10

REPCMPSB

JNZNOEQU;

串不相等转

MOVAL,0

JMPOUTPT

NOEQU:

MOVAL,0FFH

OUTPT:

MOVRESULT,AL

STOP:

JMPSTOP

4.9编程求和Y=A1+A2+….+A100。

其中Ai为字节变量。

DATASEGMENT

TABLEDW12,3,45,..

YALDW?

YAHDW?

DATAENDS

……….

MIANPROCFAR

PUSHDS

MOVAX,0

PUSHAX

MOVAX,DATA

MOVDS,AX

MOVDX,0

XORAX,AX;

清AX

MOVBX,OFFSETTABLE

MOVCX,4

CLC

LP:

ADDAX,[BX];

求和

JNCDON

INCDX

CLC

DON:

INCBX

INCBX;

指向下一个数

LOOPLP;

未加完,继续

MOVYAL,AX;

存和

MOVYAH,DX

MAINENDP

CODEENDS

ENDSTART

4.10内存中以FIRST和SECOND开始的单元中存放着4字节非组合BCD码,低位在前。

编程序求这两个数的非组合的十进制和,并存到以THIRD开始的单元。

1325+9839=?

FIRSTDB05H,02H,03H,01H;

SECONDDB09H,03H,08H,09H;

THIRDDB20DUP(?

DATAENDS

STACKSEGMENT

ST1DB100DUP(‘SA’)

TOP1EQUST1LENGTHST1

STACKENDS

CODESEGMENT

ASUMMECS:

CODE,DS:

DATA,SS:

STACK

MAINPROCFAR

START:

MOVAX,DAT;

初始化数据段

MOVAX,STACK;

初始化堆栈段

MOVSS,AX

MOVAX,TOP1

MOVSP,AX

MOVCX,4;

计算4次

MOVBX,OFFSETDAT1;

取数据地址

MOVSI,OFFSETDAT2;

MOVDI,OFFSETSUM;

取结果地址

MOVAH,00H;

将暂存标志的AH清0

DON1:

MOVAL,[BX];

取第一个数

SAHF;

将AH中的标志送标志寄存器

ADCAL,[DI];

与第二个数带进位加

AAA;

十进制校正

LAHF;

将标志寄存器内容送AH

ORAL,30H;

计算值拼成ASCII码

MOV[DI],AL;

存结果的ASCII码

指向第一个数的下一位

INCSI;

指向第二个数的下一位

INCDI;

指向结果单元的下一位

LOOPDON1;

未计算完,继续

ANDAH,01H;

将最高位的进位标志送AH

ORAH,30H;

最高位的进位位拼成ASCII码

MOV[DI],AH;

存结果的最高位

MOVAH,02H;

调用DOS的02H功能显示

MOVCX,05H;

显示数据的位数

DON2:

MOVDL,[DI];

显示数据送DL

INT21H;

显示

DECDI;

显示数据所在存储单元加一

LOOPDON2;

未显示完,继续

MOVAH,4CH;

返回DOS

INT21H

RET

MAINENDP

CODEENDS

ENDSTART

4.11试编程序,统计由40000H开始的16K个单元中所存放的字符“A“的个数,并将结果存放在DX中。

【答】参考程序

DATASEGMENT

DATA1DB'

DFASFAAAFDFAAFFFA'

COUNTEQU$-DATA1

DATAENDS

STACKSEGMENT

STADB100DUP(?

TOPEQULENGTHSTA

STACKENDS

CODESEGMENT

ASSUMECS:

BEGIN:

MOVAX,DATA

MOVDS,AX

MOVAX,STACK

MOVSS,AX

MOVAX,TOP

MOVSP,AX

MOVCX,COUNT

LEASI,DATA1

MOVBL,'

A'

NEXT:

CMP[SI],BL

JNZOTHER

OTHER:

INCSI

LOOPNEXT

CODEENDS

ENDBEGIN

4.12统计数据块中正数与负数的个数,并将正数与负数分别送到两个缓冲区。

BLOCKDB-1,-3,5,6,-2,0,20,10

PLUS_DDB8DUP(?

);

正数缓冲区

MINUS_DDB8DUP(?

负数缓冲区

PLUSDB0

MINUSDB0

MOVSI,OFFSETBLOCK

MOVDI,OFFSETPLUS_D

MOVBX,OFFSETMINUS_D

MOVCX,8;

数据个数送CX

GOON:

LODSB;

AL←[SI]

TESTAX,80H

JNZJMIUS;

为负数,转

INCPLUS;

正数个数加一

STOSB;

[DI]←AL,传正数

JMPAGAIN

JMIUS:

INCMINUS;

负数个数加一

XCHGBX,DI

STOSB;

送负数到缓冲区

XCHGBX,DI

DECCX

JNZGOON

4.13编写一个子程序将AX中的十六进制数,转换成ASCII码,存于ADR开始的四个单元中。

提示:

1)、AX中的数从左到右,转换成ASCII码,用循环左移ROL和AND指令,把提出的一个十六进制数置BL中;

2)、0~9的ASCII码:

30~39H,A~F的ASCII码:

41H~46H。

(先把每个数加30H,判断是否为数字0~9?

若是A~F,再加07H,得字母的ASCII码。

ADRDB4DUP(?

MAINPROCFAR

DATA

MOVAX,7EC3H;

假设ax中存放7ec3h

LEASI,ADR

MOVDL,4

AGAIN:

MOVBX,AX

ANDBX,000FH

ADDBL,30H

CMPBL,'

9'

JGADUST

JMPSTORE

ADUST:

ADDBL,07H

STORE:

MOV[SI],BL

INCSI

MOVCL,4

ROLAX,CL

DECDL

JNZAGAIN

MAINENDP

ENDSTART

4.14编写一个子程序将AX中的2进制数,转换成10进制ASCII码,存于ADR开始的五个单元中。

【答】参考程序:

BINEQU5555H;

假设二进制数为5555H

DATASEGMENT

ADRDB4DUP(?

DATA,SS:

MOVAX,BIN

LEABX,ADR

MOVCX,10000D

CALLBINTODEC

MOVCX,1000D

MOVCX,100D

CALLBINTODEC

MOVCX,10D

CALLBINTODEC

MOVCX,01D

MOVAX,04CH;

INT21H

;

十进制转二进制,完成一位运算,十进制存于ax中,结果存于bx所指向的地址中

BINTODECPROCNEAR

DIVCX

ADDAL,30H

MOV[BX],AL

MOVAX,DX

INCBX

RET

BINTODECENDP

4.15编写一个子程序,对AL中的数据进行偶校验,并将经过校验的结果放回AL中。

JIAOYANPROCFAR

MOVAL,1001110B

ORAL,AL

JNPNEXT

MOVAL,0

JMPDONE

NEXT:

MOVAL,1

DONE:

MOVAH,04CH

JIAOYANENDP

4.16从2000H单元开始的区域,存放100个字节的字符串,其中有几个$符号(ASCII码为24),找出第一个$符号,送AL中,地址送DI。

SEARCHPROCFAR

MOVDI,2000H

MOVCX,100

MOVAL,24H

CLD

REPNZSCASB

DECDI

MOVAL,[DI]

SEARCHENDP

4.17用串操作指令实现:

先将100H个数从2170H单元处搬到1000H单元处,然后从中检索等于AL中字符的单元,并将此单元换成空格字符。

MAINPROCFAR

MOVSI,2170H

MOVDI,1000H

MOVCX,100H

REPMOVSB

MOVDI,1000H

DO:

REPNZSCASB

CMPCX,0

JZEND

MOV[DI],20H

INCDI

CMPCX,0

JNZDO

END:

HLT

ENDSTART

4.18从60H个元素中寻找一个最大的值,并放到AL中,假设这60个元素放在DATA1开始的单元中。

DATA1DB0,1,2,3,4,5,6,7,8,9;

STADB20DUP(?

TOPEQULENGTHSTA

MOVDS,AX

MOVAX,TOP

MOVSP,AX

MOVCX,10

LEABX,DATA1

CMPAL,[BX]

JGENEXT;

大于等于转移

MOVAL,[BX]

LOOPAGAIN

MOVAH,4CH

ENDSTART

4.19排序程序设计:

把表中元素按值的大小升序排列。

要求显示排序前和排序后的数据。

TABDB'

8095554'

N=$-TAB

OKDB0DH,0AH,'

OK!

$'

STACKSEGMENT

STADB20DUP(?

TOPEQULENGTHSTA

STACENDS

STAR:

MOVAX,DATA

MOVDS,AX;

CALLARRAY

MOVAH,4CH

INT21H;

ARRAYPROCNEAR

PUSHBX

PUSHCX

PUSHDX

MOVDL,N-1;

置外循环次数

MOVDH,1;

设有交换标志

XORBX,BX

UPPER:

ORDH,DH;

JZDISP;

无交换,已排好序,退出

MOVDH,0;

无交换

MOVCX,N-1

SUBCX,BX;

CX=CX-I内循环次数

MOVSI,0;

指向表首

INNER:

MOVAL,TAB[SI];

字符送AL

INCSI;

指向下个字符

CMPAL,TAB[SI];

比较表中相邻字符

JBEDON;

小于

XCHGAL,TAB[SI];

否则交换,大字符下

MOVTAB[SI-1],AL;

小字符上浮

有交换,DH=1

LOOPINNER;

内循环结束?

CX-1

INCBX;

一次内循环完成,加一

DECDL;

外循环次数减一

CMPDL,0

JNZUPPER;

外循环次数非零,继续

DISP:

MOVDX,OFFSETTAB

MOVAH,09H

INT21H;

显示排好序的字符

POPDX

POPCX

POPBX

POPAX

ARRAYENDP

ENDSTAR

4.20编写一段程序,接收从键盘输入的10个数,输入回车符表示结束,然后将这些数加密后存于BUFF缓冲区中。

加密表为:

输入数字:

0,1,2,3,4,5,6,7,8,9;

密码数字:

7,5,9,1,3,6,8,0,2,4。

TABLEDB7,5,9,1,3,6,8,0,2,4;

密码表

str1DB0A,0Dh,’Pleaseinputthefourhexnumber:

$’

str2DB0Ah,0Dh,’Theresultis:

BUFFDB10DUP(?

),'

存放转换数字的缓冲区

STADB20DUP(?

MOVSS,AX

MOVDI,OFFSETBUFF

LEABX,TABLE

MOVCX,0DH

LEADX,str1

MOVAH,9

INT21H

RE1:

MOVAH,1;

从键盘输入

INT21H

CMPAL,0DH

JZDONE

SUBAL,30H

XLAT

ADDAL,30H

MOV[DI],AL

INCDI

LOO

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

当前位置:首页 > 自然科学 > 物理

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

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