第3章-汇编语言程序设计-例_第1页
第3章-汇编语言程序设计-例_第2页
第3章-汇编语言程序设计-例_第3页
第3章-汇编语言程序设计-例_第4页
第3章-汇编语言程序设计-例_第5页
已阅读5页,还剩17页未读 继续免费阅读

下载本文档

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

文档简介

2023/2/4例3-1:数据块传送程序:将以S1为起始地址的30个字符依次传送到同数据段的以S2为起始地址的一片字节存储单元里。

41H42H…33H

S130个字符S2--…-SIDI方法一:数据块是用DB定义的一个字符串S1。用寄存器间接寻址方式访问S1和S2,即用[SI]表示S1中各字节的位移量,用[DI]表示S2中各字节的位移量。第三章汇编语言程序设计举例2023/2/4程序如下:DATASEGMENTS1DB‘ABCDEFGHIJKLMNOPQRSTUVW’DB‘XYZ0123’S2DB30DUP(?)DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETS1MOVDI,OFFSETS2MOVCX,30NEXT:MOVAL,[SI]MOV[DI],ALINCSIINCDILOOPNEXTMOVAH,4CHINT21HCODEENDSENDSTART2023/2/4DATASEGMENTS1DB‘A’,‘B’,‘C’,‘D’,‘E’DB‘FGHIJKLMNOPQRSTUVWXYZ’DB‘0’,‘1’,‘2’,‘3’S2DB30DUP(?)DATAENDSCODESEGMENTASSUMEDS:DATA,CS:CODESTART:MOVAX,DATA

MOVDS,AX

我们也可以使用其它方法来实现,如用变址寻址方式等。程序如下:MOVSI,0MOVCX,30NEXT:MOVAL,S1[SI]MOVS2[SI],ALINCSILOOPNEXTMOVAH,4CHINT21HCODEENDSENDSTART2023/2/4

DSEGSEGMENTDATADB20DUP(?)DSEGENDSCSEGSEGMENTASSUMECS:CSEG,DS:DSEGGO:MOVAX,DSEGMOVDS,AXMOVCX,20MOVSI,OFFSETDATAL01:MOVAH,01HINT21HMOV[SI],ALINCSILOOPL01例3-2:从键盘上输入20个字符,然后以与键入字符的先后相同的顺序显示出来。MOVCX,20MOVSI,OFFSETDATAL02:MOVDL,[SI]MOVAH,02HINT21HINCSILOOPL02MOVAH,4CHINT21HCSEGENDSENDGO2023/2/4CODESEGMENTASSUMECS:CODESTART:MOVCX,20L1:MOVAH,01HINT21HPUSHAXLOOPL1MOVDL,0AH;显示“回车”MOVAH,02HINT21HMOVDL,0DH;显示“换行”

INT21H例3-3:在键盘上输入20个字符,然后用与输入字符的先后相反的顺序在屏幕上显示出来。MOVCX,20L2:POPDXMOVAH,02HINT21HLOOPL2MOVAH,4CHINT21HCODEENDSENDSTART2023/2/4

一位

十进制(BCD码)的显示: MOVDL,AL ANDDL,0FHADDDL,30HMOVAH,02HINT21H例3-4:数据的显示:2023/2/4例3-4:数据的显示:紧凑结构: MOVDL,AL ANDDL,0FH CMP DL,09 JNA

NEXTADDDL,07NEXT: ADD DL,30H MOVAH,02HINT21H一位

十六进制的显示: MOVDL,ALANDDL,0FH CMP DL,09 JNANEXTADDDL,37H JMPDISPNEXT: ADD DL,30HDISP:MOVAH,02HINT21H2023/2/4CODESEGMENTASSUMECS:CODESTART:MOVDL,BL MOVCL,04SHRDL,CL;高4位移至低4位ADDDL,30HMOVAH,02HINT21H;高4位显示

例3-4:数据的显示:

1、把BL中一个字节的十进制数据(BCD码)显示出来。 MOVDL,BL ANDDL,0FH

ORDL,30H MOVAH,02H INT21H;低4位显示 MOVAH,4CHINT21HCODEENDSENDSTART2023/2/4CODESEGMENT ASSUMECS:CODESTART:MOVDL,BL MOVCL,04 SHRDL,CL;高4位移至低4位 CMP DL,09 JNA

NEXTADDDL,07NEXT: ADD DL,30H MOVAH,02HINT21H;高4位显示

例3-4:数据的显示:

2、把BL中一个字节的十六进制数据显示出来。 MOVDL,BL CMP DL,0AH

JBNEXT2ADDDL,07NEXT2:ADD DL,30H MOVAH,02H INT21H;低4位显示 MOVAH,4CHINT21HCODEENDSENDSTART2023/2/4例:MOVBX,OFFSETTABLE;(BX)=0040HMOVAL,3XLATTABLE

指令执行后(AL)=33H注意:

*不影响标志位*

字节表格(长度不超过256)

首地址

(BX)*

需转换代码(AL)(BX)30HF004031HF0041(AL)=332HF004233HF0043TABLE(DS)=F000H换码指令:XLAT

或XLATOPR执行操作:(AL)((BX)+(AL))2023/2/4例3-5:编写一个加密0~9数字序列的程序,设0,1,2,3,4,5,6,7,8,9对应的密码表为:9,0,8,2,7,4,6,3,1,5,键盘输入0825,显示输出9184。DATASEGMENTSTRDATDB0,8,2,5TABLEDB‘9082746315’DATAENDSCODESEGMENT

ASSUMECS:CODE,DS:DATAGO:MOVAX,DATAMOVDS,AXMOVES,AXLEASI,STRDATLEABX,TABLE MOVCX,4L1: MOVAL,[SI] XLAT

MOVDL,AL MOVAH,02 INT21H LOOPL1 MOVAH,4CH INT21HCODEENDS ENDGO2023/2/4DATASEGMENTBUFFERDB00H,12H,3BH,43H,60H,0CH…COUNTEQU$-OFFSETBUFFER($-BUFFER)MAXDB?DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVSI,OFFSETBUFFERMOVCX,COUNTMOVAL,[SI]INCSIDECCX;比较COUNT-1次COMPA:CMPAL,[SI];找大数

JANEXTMOVAL,[SI]NEXT:INCSILOOPCOMPA;比较完否?MOVMAX,AL;保存大数例3-6:对一组字节型无符号数进行比较,把最大数显示在屏幕上。2023/2/4MOVBL,ALMOVDL,ALMOVCL,4SHRDL,CLCMPDL,0AHJBL1ADDDL,7L1:ADDDL,30HMOVAH,02HINT21H;显示高位MOVDL,BL;将大数送至DLANDDL,0FH;截取其低4位CMPDL,0AH

JBL2ADDDL,7L2:ADDDL,30HMOVAH,02HINT21H;显示低位MOVAH,4CHINT21HCODEENDSENDSTART

2023/2/4DATASEGMENTBUFFERDW00H,12H,3BH,0A3H,94H,0CH…COUNTDW$-OFFSETBUFFER;或($-BUFFER)/2RUSLTDB0DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXLEASI,BUFFER MOV BL,0MOVCX,COUNT

SHR CX,1COMPA:MOVAL,[SI];找大数

OR AL,0 JNSNEXTINC BLNEXT:INCSILOOPCOMPA;比较完否?MOVRUSLT,BL;保存大数 ……例3-7:统计一批字型数据中负数的个数,结果放在RUSLT变量中。2023/2/4例3-8:间接转移编写一个程序,根据输入的1-8的数字,转到8个不同的标号处进行各自的处理。即:当输入1时,则转到标号L1处,输出字母A;当输入2时,则转到标号L2处,输出字母B;……当输入8时,则转到标号L8处,输出字母H。假设:数字1-8由键盘上输入。分析:首先将输入的ASCII码转换成对应的数字;然后根据数字,利用段内间接转移指令JMPWORDPTR[BX],转移到对应的标号处执行。2023/2/4DATASEGMENTTABLE1DWL1,L2,L3,L4,L5,L6,L7,L8DATAENDSCODESEGMENTASSUMECS:CODE,DS:DATASTART:MOVAX,DATAMOVDS,AXMOVAH,01HINT21HSUBAL,30HCMPAL,8JAL10 DECALSHLAL,1MOVAH,0MOVSI,AXLEABX,TABLE1JMPWORDPTR[BX][SI]

……….. JMPTABLE1[SI]2023/2/4

…………L1:MOVDL,’A’JMPL9L2:MOVDL,’B’JMPL9L3:MOVDL,’C’JMPL9L4:MOVDL,’D’JMPL9L5:MOVDL,’E’JMPL9L6:MOVDL,’F’JMPL9L7:MOVDL,‘G’JMPL9L8:MOVDL,‘H’JMPL9L9:MOVAH,02HINT21HL10:MOVAH,4CHINT21HCODEENDSENDSTART2023/2/4例3-9:数据块传送程序:将以S1为起始地址的30个字符依次传送到同数据段的以S2为起始地址的一片字节存储单元里。(例3-1)

完成操作后自动修改SI、DI,使其指向串的下一个元素,串操作方向由CLD和STD指令设置:

CLD

地址递增方向(DF=0)

STD

地址递减方向(DF=1)字符串操作指令:MOVSstr1,str2;(格式)将一个字节/字从DS:[SI]ES:[DI]MOVSB;功能MOVSW;功能CMPS、SCAS、LODS、STOS指令前要先将源串首地址DS:[SI]

目标串首地址ES:[DI]2023/2/4需要先将串的长度存入CX寄存器每处理完一个元素自动使CX-1,直到CX=0才

温馨提示

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

评论

0/150

提交评论