程序Word文档下载推荐.docx
- 文档编号:20445290
- 上传时间:2023-01-23
- 格式:DOCX
- 页数:22
- 大小:135.31KB
程序Word文档下载推荐.docx
《程序Word文档下载推荐.docx》由会员分享,可在线阅读,更多相关《程序Word文档下载推荐.docx(22页珍藏版)》请在冰豆网上搜索。
计算X*Y+Z-100
SBBBX,0
MOVAX,W;
计算W-(X*Y+Z-100)
SUBAX,CX
SBBDX,BX
IDIVW;
商送AX,余数送DX
MOVAH,4CH
INT21H
CODEENDS
ENDSTART
排序:
例4-23把从BUF单元开始的80个16位无符号数按从大到小的顺序排列。
分析:
Ø
这是排序问题,无符号数的比较可以直接用比较指令CMP和条件转移指令JNC来实现
这又是双重循环问题,内循环使第1个数与下一个数比较,若大于则位置保持不变,小于则将大数放低地址,小数放高地址(两数交换),外循环进行79次,完成对80个无符号数的大小排序
采用先执行后判断循环结构,程序流程图如图4-4所示。
DSEGSEGMENT
BUFDW80DUP(?
);
已存入这80个字单元
DSEGENDS
CSEGSEGMENT
CSEG,DS:
DSEG
START:
MOVAX,DSEG
LEADI,BUF;
DI指向要排序的数的首址
MOVBL,79;
外循环只需79次即可
LOOP1:
MOVSI,DI;
SI指向当前要比较的数
MOVCL,BL;
CL为内循环计数器,循环次数每次少1
LOOP2:
MOVAX,[SI];
取第一个数NI
ADDSI,2;
指向下一个数NJ
CMPAX,[SI];
NI≥NJ?
JNCNEXT;
若大于,则不交换
MOVDX,[SI];
否则,交换NI和NJ
MOV[SI-2],DX
MOV[SI],AX
NEXT:
DECCL;
内循环结束?
JNZLOOP2;
若未结束,则继续
DECBL;
外循环结束?
JNZLOOP1;
MOVAH,4CH;
返回DOS
CSEGENDS
逻辑尺:
例设有数组x(x1,…,x10)和y(y1,…,y10),编程计算
z1=x1+y1
z2=x2+y2
z3=x3-y3
z4=x4-y4
z5=x5-y5
z6=x6+y6
z7=x7-y7
z8=x8-y8
z9=x9+y9
z10=x10+y10
0011011100
1减法
0加法
XDWX1,X2,X3,X4,X5,X6,X7,X8,X9,X10
YDWY1,Y2,Y3,Y4,Y5,Y6,Y7,Y8,Y9,Y10
ZDWZ1,Z2,Z3,Z4,Z5,Z6,Z7,Z8,Z9,Z10
LOGIC_RULEDW00DCH
MOVBX,0
MOVCX,10
MOVDX,LOGIC_RULE
MOVAX,X[BX]
SHRDX,1
JCSUBTRACT
ADDAX,Y[BX]
JMPSHORTRESULT
SUBTRACT:
SUBAX,Y[BX]
RESULT:
MOVZ[BX],AX
ADDBX,2
LOOPNEXT
进制转换
例把BX中的二进制以十六进制的形式显示在屏幕上
MOVCH,4
ROTATE:
MOVCL,4
ROLBX,CL
MOVAL,BL
ANDAL,0FH
ADDAL,30H;
’0’-’9’ASCII30H-39H
CMPAL,3AH
JLPRINTIT
ADDAL,7H;
’A’-’F’ASCII41H-46H
PRINTIT:
MOVDL,AL
MOVAH,2
INT21H;
附录4,P357
DECCH
JNZROTATE
例4-27把一个二进制数转换为BCD码。
HEXDW1234H
BCDDW0,0
ASSUMECS:
CODE,DS:
DATA
START:
MOVAX,DATA
MOVDS,AX
MOVAX,HEX
XORBX,BX;
用于存结果
MOVCX,0404H;
移位CL=4及循环次数CH=4
MOVBP,10;
除数
LOOP1:
XORDX,DX
DIVBP
RORDX,CL
RORBX,CL
ORBX,DX
JNZLOOP1
MOVBCD,BX
MOVBCD+2,AX
MOVAH,4CH
;
将AX中的4位BCD码装换成16进制
NUMDW1234
ASSUMEDS:
DATA,CS:
CODE
MOVBX,NUM
MOVBP,0
MOVDI,4
L2:
MOVCX,4
XORAX,AX
L1:
RCLBX,1
RCLAX,1;
AX=0001H
LOOPL1
XCHGAX,BP
MOVSI,10
MULSI
XCHGAX,BP
ADDBP,AX
DECDI
JNZL2
MOVAX,BP
排序
在自BLOCK开始的内存缓冲区中,有100个带符号的16位数,要找出其中的最大值,把它存放到MAX单元中。
MOVBX,OFFSETBLOCK
MOVAX,[BX]
INCBX
MOVCX,99
L1:
CMPAX,[BX]
JGEL2(不小于则转移)
L2:
INCBX
DECCX
JNZL1
MOVMAX,AX
数据的输入与输出
输入一个字符:
01
使用中断21H,功能调用号为01H,将输入任意键入的字符,存入AL中(ASCII码)
MOVAH,01H
INT21H
输入字符串:
0A
DX=缓冲区首址
LEADX,BUF
MOVAH,0AH
输入字符串(AH=0ah)
缓冲区的第一个字节保存最大字符数,这个最大字符数由用户程序给出。
第二个字节是实际输入字符的个数,由功能A填入,不是由用户填入。
在这两个字节之后,字符串按字节存入缓冲区,结束字符串的回车符0DH还要占用一个字节。
(1)maxlendb32
actlendb?
stringdb32dup(?
leadx,maxlen
movah,0ah
int21h
输出一个字符:
02
使用02号功能,将DL中的字符显示出来
MOVDL,‘X’
MOVAH,02H
输出字符串:
09
DX=串地址串必须以$结束,光标跟随串移动
LEADX,DATA
MOVAH,09H
显示单个字符(AH=2)
movah,2
movdl,‘A’
int21h
显示字符串(AH=9)
stringdb‘HELLO’,0dh,0ah,‘$’
leadx,string
movah,9
EX1从键盘上键入20个字符,将键入的字符按相同的顺序显示出来。
键入时,每键入一个字符,输出一个空格。
DATADB20DUP(?
STACK1SEGMENT
DB200DUP(0)
STACK1ENDS
CSEG,DS:
DSEG,SS:
STACK1
MOVAX,DSEG
LEASI,DATA
MOVCX,20
LP1:
MOVAH,01H
MOV[SI],AL
MOVDL,20H
MOVAH,02H
LOOPLP1
LEASI,DATA;
若要相反顺序输出,此句省略
MOVCX,14H
MOVDL,0DH;
回车
MOVDL,0AH;
换行
LP2:
MOVDL,[SI]
INCSI;
若要相反顺序输出,此句改为DECSI
LOOPLP2
NAME
DATASSEGMENT
STRINGDB'
WHAT'
SYOURNAME?
$'
;
显示字符串!
!
注意要加$!
!
输入字符串
DA1DB32;
输入字符串最大长度为32位(字符串都用DB定义)
DB?
输入字符串实际长度为?
DB32DUP(?
);
最大长度32位下的实际语句定义
DATASENDS
CODESSEGMENT
CODES,DS:
DATAS
MOVAX,DATAS
MOVDS,AX;
这里开始初始化
MOVDX,OFFSETSTRING
MOVAH,09H
DOS功能调用,显示字符串WHAT'
LEADX,DA1
MOVAH,0AH
键入到缓冲区,即把键入的字符串存到DS:
DX
CODESENDS
相加
例、1+2+3+……+100=?
并显示出来。
BUFDB8DUP(0);
最大长度8,初值0
DATA,SS:
MOVBX,1;
加数
MOVAX,0;
和
MOVCX,100;
次数
ADDAX,BX
LOOPL1;
5050
MOVCX,0
MOVBX,10
LEASI,BUF
MOVDX,0
DIVBX
PUSHDX;
保存余数
INCCX;
保存个数计数
ORAX,AX
JNEL2;
商AX不为0则循环
L3:
POPDX
ADDDL,30H
MOV[SI],DL
JNEL3
MOV[SI],BYTEPTR0DH先生成表格再输出
MOV[SI+1],BYTEPTR0AH
MOV[SI+2],BYTEPTR'
LEADX,BUF;
MIN
DATASEGMENT;
数据段
DAT1DB22H,1AH,4DH,6EH,9FH
DDB?
CODESEGMENT;
代码段
MOVAX,DATA;
初始化
LEASI,DAT1
MOVCX,5
CLD
LODSB
MOVD,AL;
将该数送至D
LODSB;
取下一个数
CMPAL,D
JLSMALL
JMPGOON
SMALL:
MOVD,AL
GOON:
MOVAX,4C00H;
退出程序
STRING
DATASSEGMENT;
STR1DB'
ZIYUANAO'
STR2DB'
ILOVEYOU'
CODESSEGMENT;
MOVAX,DATAS;
LEASI,STR1
LEADI,STR2
MOVCX,10
REPMOVSB
MOVAX,4CH;
WXYZ
XDW0001H
YDW0002H
ZDW0003H
WDW0004H
MOVAX,X
MOVBX,AX
MOVCX,DX
MOVAX,Z
ADDBX,AX
ADCCX,DX
SUBBX,100
SBBCX,0
MOVAX,W
SUBAX,BX
SBBDX,CX
IDIVX
ZERO
DDW?
ADW1
BDW2
CDW3
CMPA,0
JNZNEXT
CMPB,0
JNZZERO
CMPC,0
ORA,1
ORB,1
ORC,1
JMPOK
JZZERO
MOVAX,A
ADDAX,B
ADDAX,C
MOVD,AX
ZERO:
ANDA,0
ANDB,0
ANDC,0
OK:
串处理
编程实现两个长度都是10个字符的字符串str1(在数据段中)和str2(在附加段中)比较。
如果两串完全相等,则跳转到rout1执行,否则继续执行。
……
LEASI,STR1
LEADI,STR2
MOVCX,10
REPECMPSB
JCXZROUT1x
ROUT1:
例比较两个字符串是否有相同的元素,它们的首地址和目标地址分别为SRC和DEST,字符串的长度为N个字节。
CLD;
DF=0,增量方向
LEASI,SRC;
DS:
SI←字符串首地址
LEADI,ES:
DEST;
ES:
DI←目标地址
MOVCX,N;
字符串长度
REPNECMPSB;
重复比较字符串
JNZNOT_FOUND;
无相同的元素,
转NOT_FOUND,
否则继续执行下条指令
例在首地址为ES:
DEST的字符串中检查是否有字符’M’,字符串的长度为N个字节。
MOVAL,’M’;
AL←搜索字符
REPNESCASB;
重复搜索字符串是否
有字符’M’
例将首地址为DS:
SRC的字节数据串中非0元素送到首地址为ES:
DEST的内存区中。
字符串长度为N。
CLD;
LEASI,SRC;
SI←字符串首地址
LEADI,ES:
DI←目标地址
MOVCX,N;
GOON:
LODSB;
取字符串的一个元素
CMPAL,0;
字符串元素为0吗?
JZNEXT;
是0,继续下一个元素
STOSB;
非0,存入首地址为ES:
DEST的内存区中
JNEGOON
分类
例若在内存缓冲区有一个数据块,起始地址为BLOCK,若数据块中有正负数,要把正负分开,正数放缓冲区的起始地址为PLVS_DATA,负的放MINVS_DATA
设SI——源数指针DI
BX——负数目的区指针
LODS指令把源数送到AL中
MOVSI,OFFSETBLOCK
MOVDI,OFFSETPLVS_DATA
MOVBX,OFFSETMINVS_DATA
MOVCX,COUNT循环次数
GOON:
LODSBLOCK
TESTAL,80H检查其符号位,为负,则MIVS
JNZMIVS
STOSB正数存入PLVS-DATA
JMPAGAIN
MIVS:
XCHGBX,DI
STOSB
AGAIN:
JNZGOON
HLT
例在存储器中有一个首地址为ARRAY的N字数组,要求测试其中正数、0及负数的个数,正数的个数放在DI中,0的个数放在SI中,并根据N-(DI)-(SI)求得负数的个数放在AX中,如果有负数则转移到NEG_VAL中去执行。
MOVCX,NNEXT:
ADDBX,2
MOVBX,0DECCX
MOVDI,BXJNZAGAIN
MOVSI,BXMOVAX,N
AGAIN:
CMPARRAY[BX],0SUBAX,DI
JLELESS-OR-EQSUBAX,SI
INCDIJZSKIP
JMPSHORTNEXTJMPNEARPTRNEG-VAL
LESS-OR-EQ:
JLNEXTSKIP:
INCSINEG-VAL:
例3-54在以DATA为首地址的内存数据段中,存放有200个16位有符号数,试找出其中最大和最小的有符号数,并分别放在MAX和MIN为首的内存单元中
比较有符号数的大小,应采用JG和JL等用于有符号数的条件转移指令
LEASI,DATA;
(SI)←数据块首地址
MOVCX,200;
(CX)←数据块长度
清方向标志DF
LODSW;
(AX)←一个16位有符号数
MOVMAX,AX;
将该数送MAX
MOVMIN,AX;
将该数送MIN
DECCX;
(CX)←(CX)-1
NEXT:
取下一个16位有符号数
CMPAX,MAX;
与MAX单元内容进行比较
JGLARGER;
若大于则转LARGER
CMPAX,MIN;
否则再与MIN单元内容进行比较
JLSMALL;
若小于MIN的内容则转SMALL
JMPGOON;
否则就转至GOON
LARGER:
MOVMAX,AX;
(MAX)←(AX)
JMPGOON
SMALL:
(MIN)←(AX)
GOON:
LOOPNEXT;
(CX)-1,若CX≠0,则转NEXT
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 程序