计算机程序编写_第1页
计算机程序编写_第2页
计算机程序编写_第3页
计算机程序编写_第4页
计算机程序编写_第5页
已阅读5页,还剩7页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、设在数据段中有X,Y两变量(字节单元),试编写程序段计算(只写有关程序功能的指令):

Y=X当X>=0

Y=0当X<0

解:moval,x

cmpa;,0

jgeAl

moval,0

Al:movy,al

2在STR单元开始定义了一长度为LEX字节的字符串,统计出其中大写字母的个数并存放到LARGE字节单元中。请

编一完整的源程序c

DATASEGMENT

STRDB'.....'

LENEQU$-STR

LARGEDB?

DATAENDS

CDEGMENT

ASSUMECS:CD,DSATA

LARGPROCFAR

MOVAX,DATA

MOVDS,AX

LEASI,STR

MOVCX,LEN

MOVBL,0

NT:CMPBYTEPTR[SI],'A'

JBNOLARG

CMPBYTEPTR[SI],'Z'

JANOLARG

INCBL

NOLARG:INCSI

LOOPNT

MOVLARGE,BL

MOVAH,4CH

INT21H

LARGENDP

CDENDS

ENDLARG

3、已知DAT1字节单元有•个数据,试编制•程序段将该数据的低4位变为1010B,最高位(第7位)置1,其余3

位不变,结果送DAT2字节单元。

MOVAL;DATA1

ANDAL:70H

ADDAL;8AH

MOVDATA2,AL

4、在和N2两数据区中,分别有10H个带符号数。试编制一源程序,找出对应项中较小的数据,并将这些较小

的数据存入N3数据区中(要求:对应项比较时必须用CMPS指令)。

DATASEGMENT

N1DBXX,XX,XX,...

N2DBXX,XX,XX,

N3DB10HDUP(0)

DATAENDS

解:STACKSEGSEGMENTSTACK

DB1024DUP(O)

STACKSEGENDS

DATASEGMENT

N1DB5Ah,6Fh,2Eh,0D8h,0E3h,9Ch,ODBh,0B7h,5Bh,21h,35h,8Eh,4Ah,15h,58h,75h

N2DB58h,OFFh,5Eh,38h,0C7h,OAlh,26h,86h,48h,35h,48h,16h,OBAh,OFAh,ODFh,0E9h

N3DB1011DUP(O)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACKSEG

START:MOVAX,DATA

MOVDS,AX

INCAX

MOVES,AX

MOVSI.OFFFHI

MOVDI,OFFFFH

MOVCX,lOh

MOVBX,OFFSETN3

CLD

AGAIN:CMPSBYTEPTRN1,BYTEPTRN2

JLNILES

MOVAL,[Sl+lOh]

MOV[BX][SI],AL

JMPCMPAGAIN

NILES:MOVAL,[si]

MOV[BX][SI],AL

CMPAGAIN:deeex

jnzagain

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

5、加密移动字符串,设缓冲区SBUFF中有20个小写字母a,将每个a加上它相对于缓冲区的位移量后传送到缓冲

区DBUFFo

STACKSEGSEGMENTSTACK

DB1024DUP(O)

STACKSEGENDS

DATASEGMENT

SBUFFDB20DUP('a')

DBUFFDB20DUP(O)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA,SS:STACKSEG

START:MOVAX,DATA

MOVDS,AX

MOVCX,20

MOVSI,0

CLD

AGAIN:LODSB

MOVBX,SI

DECBX

ADDAX,BX

MOVDBUFFESI-1],AL

LOOPAGAIN

DBUFF

INT21H

MOVAH,4CH

INT21H

CODEENDS

ENDSTART

6、在EUF1和BUF2两个数据区中,各定义有10个带符号字数据,试编制一完整的源程序,求它们对应项的和,并

将和数存入以SUM为首址的数据区中。

DATASEGMENT

BUF1l)W-56,24,54,-1,89,-8,....

BUF2DW45,-23,124,345,-265,....

SUMDW10DUP(0)

DATAENDS

CODESEGMENT

ASSUMECS:CODE,DS:DATA

BEGIN;

MOVAX;DATA

MOVES;AX

MOVDS;AX

LEASLBUF1

MOVBX,OFFSETBUF2

LEADLSUM

MOVCXJO

LI:

MOVAX;[SI]

ROLAX;1

JCL2

RORAX;1

L4:

MOVDX:AX

MOVAX:[BX]

ROLAX;1

JCL3

RORAX;1

L5:

ADDAX、DX

MOV[DI],AX

INCBX

INCBX

INCSI

INCSI

INCDI

INCDI

LOOPLI

JMPLAST

L2:

RORAX;1

NEGAX

JMPL4

L3:

RORAX;1

NEGAX

JMPL5

LAST:

MOVAH;4CH

INT21H

CODEENDS

ENDBEGIN

7、试编写一个汇编语言程序,要求对键盘输入的小写字母用大写字母显示出来。

DATASSEGMENT

MSGDB0,0,〃H〃,”$〃

CRDB13,10,3"

TABIDB”0123456789ABCDEF”

DATASENDS

STACKSSEGMENT

STACKSENDS

CODESSEGMENT

ASSUMECS:CODES,DS:DATAS,ES:DATAS,SS:STACKS

START:

MOVAX;DATAS

MOVDS:AX

MOVES:AX

MOVCX;127

MOVDL:0

MOVSI;OFFSETTABI

MOVOFFSETMSG

AG:PUSHCX

PUSHDX

MOVAX;0

MOVAL.DL

MOVBL10H

DIVBL

MOVBX;0

MOVBL:AH

MOVDll[SI+BX]

MOV[DI+1],DH

MOVBL:AL

MOVDH;[SI+BX]

MOV[DI],DH

PUSHDX

MOV[)X;OFFSETMSG

MOVAH;9

INT2111

POPDX

MOVAll2

INT21H

PUSHAX

MOVDX;OFFSETCR

MOVAH:9

INT21H

POPDX

POPDX

POPCX

INCDL

LOOPAG

MOVAH:4cH

INT21H

CODESENDS

ENDSTART

8、汇编程序,以BUF为首地址的内容存单元中有「15的平方表。查表求X单元中数(1~15之间)的平方值并送

回X单元

codesegment

assumecs:code,ds:code

orglOOh

start:

pushcs

popds

leabx}BUF;BX指向表首

moval.X

decal;偏移送AL

xlat;查表

movX,al;平方值并送回X单元

movah.4ch

int21h

BUFdb1,4,9,16,25,36,49,64,81,100,121,144,169,196,225

Xdb8

codeends

endstart

9、已知存储器中有一个首地址为ARRAY的100个字数组,现要求把数组中的每个数加1(不考虑溢出的可能性),

试编制完成此功能的程序段。

MOVBX,OFFSETARRAY

MOVAX,1

MOVCX,100

L00P1:ADD[BX],AX

LOOPL00P1

10、.编写一段程序,如果字节变量TESTONE和TESTTWO相等,则调用子程序,显示‘#';否则调用NOTSAME子程

序,显示。

datasegment

infondbOdh,Oah,*#$'

infon2dbOdh,Oah,'!$'

TESTONEdbOdh,Oah,*2$'

TESTTWOdbOdh,Oah,'1$'

dataends

stacksegmentstack

db200dup(O)

stackends

codesegment

assumeds:data,ss:stack,cs:code

start:

movax;offsetTESTONE

movbxroffsetTESTTWO

empax.bx

jek2

jnekl

kl:callshow

k2:callNOTSAME

exit:movah,4ch

int21h

showprocnear;

leadx.infonmovah,9

int21h

ret

showendp

NOTSAMEprocnear;

leadx.infon2;在屏幕上显示提示信息

movah;9

int21h

NOTSAMEendp

codeends

endstart

11、已定义了两个整数变量A和B,试编写程序完成下列功能:

A.若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中。

B.若两个数均为奇数,则将两数均加1后存回原变量。

C.若两个数均为偶数,则两个变量均不改变。

(要求各段定义完整,并画出程序流程图)

datasegment

adb3

bdb3

dataends

codesegment

assumeds:data,cs:code

start:

movax.data

movds:ax

testa.1

jznextl

testb.1

jztj

inca

incb

jmptj

nextl:

testb;1

jztj

moval.a

xchgal,b

mova,al

tj:

movah.4ch

int21h

codeends

endstart

12、假设DATAX和DATAX+2单元存放双字P,DATAY和DATAY+2单元中存放双字Q,编程计算2P-Q,差在DX,AX中。

若OF=1,程序转OVERFLOW,否则转NOOYER。(只写与试题要求有关的指令语句)

DATASEGMENT

DATAXDW2321H,3243H

DATAYDW1233H,4332H

DATAENDS

CODESEGMENT

ASSUMEI)S:DATA,CS:CODE

START:

MOVAX;DATA

MOVDS:AX

MOVDX:DATAX+2

MOVAX;DATAX

SHLAX:1

RCLDXJ;求2P

SUBAX:DATAY

SBBDX:DATAY+2;求2P-Q

JOOVERFLOW

NOFLOW:

MOVAll0

JMPEXIT

OVERFLOW:

MOVAH;1

EXIT:

MOVAX;4C00H

INT21H

CODEENDS

ENDSTART

13、已知在数据区BUF1和BUF2分别存放20个字节数据。编程检查两数据区中的数据是否相同。若完全一致,则

将标志单元FLAG置FFH,否则置0,并将第一次出现的不同数据的地址分别存放在ADDR1和ADDR2单元中。

要求:源程序格式完整。

datasegment

xdw?

ydw?

msgdb'continuc?YesorNo?$'

msgldb'Inputfirstnumber:$*

msg2db'Inputsecondnumber:$?

msg3db'Shangis:$'

dataends

decihexsegment

assumecs:decihex,ds:data

mainprocfar

movax;data

movds.ax

repeat:

leasi.x

leadx.msgl

movah:9

int21h

calldecibin

callcrlf

leasi.y

leadx.msg2

movah,9

int21h

calldecibin

callcrlf

movax.x

cwd

divwordptr[x+2]

pushdx

movbx;ax

leadx.msg3

movah.9

int21h

callbinidec

movdl:’.'

movah.2

int21h

popax

movcx;10

mulex

divwordptr[x+2]

movbx.ax

movex.1

calldecdiv

cal1crlf

leadx;msg

movah.9

int21h

callcrlf

movah.i

int21h

empal.*Y*

jzrepeat

14、设X、Y、Z、W为十六位有符号数编程计算:

W-(X+Y*Z)/8-Y除法余数丢弃

若ZF=1,程序转EQ;否则转NOT_EQ。

movax;y

imulz;计算y*z,结果在dx和ax中

addax.x;ax+x

adcdx.0;dx+ax与x相加产生的进位

movbx.8

divbx;dx、ax除以8,余数在dx中,商在ax中

subax:y;商-丫,影响标志位ZF

movw,ax;存结果,mov指令不影响标志位

jzeq;测试的是sub执行后的标志,zf=l转eq

jmpnot_eq;zf不为1,转not_eq

15、已知在以ARRAY为首地址的数据区中存放10个带符号字数据:

ARRAYl)W1,2,-1,3,4,-2,-3,4,5,-6

编程将ARRAY分成两个数组:正数数组P_ARY和负数数组N_ARY,尹分别显示正数项个数和负数项个数。

要求:源程序格式完整。

datasegment

arraydw1,2,-1,3,4,-2,-3,4,5,-6

P_ARYdw10dup(?)

N_ARYdw10dup(?);以上是定义

dataends

codesegment

assunccs:code,ds:data

start:

movax,data

movds,ax

leabx,array

leasi,N_ARY

leadi,P_ARY

movex,10

again:

empwordptr[bx],0;这里是比较

jlokl;>0放入OKI

jgok2:<0放入OKO

jmpok3;否则放入0K3

okl:novax,[bx]

nov[di],ax

adddi,2

jmpok3

ok2:novax,[bx]

nov[si],ax

addsi,2

jmpok3

ok3:addbx,2

decex

jnzagain

novah,4ch

int21h

codeends

endstart

16、X,Y,Z二个字节存储单元中各有一个无符号数,其中有两个数据相等,找出不相等的哪个数,并存入w单元

中,试编写完成上述功能的程序段(只编写有关代码部分,勿需书写源程序格式)。

moval,x

empal,y

jexy

jnenxy

xy:moval,z

movw,al

jmpover

nxy:empal,z

jexz

jnenxz

xz:moval,y

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论