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

下载本文档

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

文档简介

1、2022-2-12例例3-1:数据块传送程序:将以S1为起始地址的30个字符依次传送到同数据段的以S2为起始地址的一片字节存储单元里。 41H42 H33 H S130个字符S2S2-SISIDIDI方法一:数据块是用DB定义的一个字符串S1。用寄存器间接寻址方式访问S1和S2,即用SI表示S1中各字节的位移量,用DI表示S2中各字节的位移量。第三章第三章 汇编语言程序设计举例汇编语言程序设计举例2022-2-12程序如下:程序如下:DATA SEGMENTDATA SEGMENTS1 DB S1 DB ABCDEFGHIJKLMNOPQRSTUVWABCDEFGHIJKLMNOPQRSTUV

2、W DB DB XYZ0123XYZ0123S2 DB 30 DUPS2 DB 30 DUP(?)(?)DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENT ASSUME DS ASSUME DS:DATADATA,CSCS:CODECODESTARTSTART:MOV AXMOV AX,DATADATA MOV DS MOV DS,AXAX MOV SI MOV SI,OFFSET S1OFFSET S1 MOV DI MOV DI,OFFSET S2OFFSET S2 MOV CX MOV CX,3030NEXTNEXT: MOV AL MOV AL,SIS

3、I MOV DI MOV DI,ALAL INC SI INC SI INC DI INC DI LOOP NEXT LOOP NEXT MOV AH MOV AH,4CH4CH INT 21H INT 21HCODE ENDSCODE ENDS END START END START2022-2-12DATA SEGMENTDATA SEGMENTS1 DB S1 DB A,A,B,B,C,C,D,D,EE DB DB FGHIJKLMNOPQRSTUVWXYZFGHIJKLMNOPQRSTUVWXYZ DB DB 0,0,1,1,2,2,33S2 DB 30 DUPS2 DB 30 DUP

4、(?)(?)DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENT ASSUME DS ASSUME DS:DATADATA,CSCS:CODECODESTARTSTART: MOV AX MOV AX,DATADATA MOV DSMOV DS,AX AX 我们也可以使用其它方法来实现,如用变址寻址方式等。程序如下: MOV SI MOV SI,0 0 MOV CX,30 MOV CX,30NEXTNEXT: MOV AL MOV AL,S1SIS1SI MOV MOV S2SIS2SI,ALAL INC SI INC SI LOOP NEXT LOOP NEX

5、T MOV AH MOV AH,4CH4CH INT 21H INT 21HCODE ENDSCODE ENDS END START END START2022-2-12 DSEG SEGMENT DATA DB 20 DUP(?)(?) DSEG ENDS CSEG SEGMENT ASSUME CS:CSEG,DS:DSEG GO: MOV AX,DSEG MOV DS,AX MOV CX,20 MOV SI,OFFSET DATA L01: MOV AH,01H INT 21H MOV SI,AL INC SI LOOP L01 例例3-2:从键盘上输入20个字符,然后以与键入字符的先后

6、相同的顺序显示出来。 MOV CX,20 MOV SI,OFFSET DATAL02: MOV DL,SI MOV AH,02H INT 21H INC SI LOOP L02 MOV AH,4CH INT 21HCSEG ENDS END GO 2022-2-12 CODE SEGMENT ASSUME CS:CODE START: MOV CX,20 L1:MOV AH,01H INT 21H PUSH AX LOOP L1 MOV DL,0AH;显示显示“回车回车” MOV AH,02H INT 21H MOV DL,0DH ;显示显示“换行换行” INT 21H 例例3-3:在键盘上输

7、入:在键盘上输入20个字符,然后用与输入个字符,然后用与输入字符的先后相反的顺序在屏幕上显示出来。字符的先后相反的顺序在屏幕上显示出来。 MOV CX,20L2: POP DX MOV AH,02H INT 21H LOOP L2 MOV AH,4CH INT 21HCODE ENDS END START2022-2-12 一位一位 十进制(十进制(BCD码)的显示:码)的显示: MOV DL,AL AND DL,0FH ADD DL, 30H MOV AH,02H INT 21H 例例3-4:数据的显示:数据的显示:2022-2-12例例3-4:数据的显示:数据的显示:紧凑结构:紧凑结构:

8、MOV DL,AL AND DL,0FHCMPDL, 09JNA NEXT ADD DL, 07NEXT: ADDDL, 30HMOV AH,02H INT 21H 一位一位 十六进制的显示:十六进制的显示: MOV DL,AL AND DL,0FHCMPDL, 09JNA NEXT ADD DL, 37HJMP DISPNEXT: ADDDL, 30HDISP: MOV AH,02H INT 21H 2022-2-12 CODE SEGMENT ASSUME CS:CODE START: MOV DL,BL MOV CL,04 SHR DL, CL ;高高4位移至低位移至低4位位 ADD D

9、L, 30H MOV AH,02H INT 21H ;高高4位显示位显示 例例3-4:数据的显示:数据的显示: 1、把BL中一个字节的十进制数据(BCD码)显示出来。MOV DL, BL AND DL,0FHOR DL, 30HMOV AH,02H INT 21H ;低低4位显示位显示MOV AH,4CH INT 21HCODE ENDS END START2022-2-12CODE SEGMENTASSUME CS:CODESTART: MOV DL,BL MOV CL,04SHR DL, CL ;高高4位移至低位移至低4位位CMPDL, 09JNA NEXT ADD DL, 07NEXT:

10、 ADDDL, 30HMOV AH,02H INT 21H ;高高4位显示位显示 例例3-4:数据的显示:数据的显示: 2、把BL中一个字节的十六进制数据显示出来。MOV DL, BL CMPDL, 0AHJB NEXT2 ADD DL, 07NEXT2:ADDDL, 30HMOV AH,02H INT 21H ;低低4位显示位显示MOV AH,4CH INT 21HCODE ENDS END START2022-2-12例:例:MOV BX, OFFSET TABLE ; (BX)=0040H MOV AL, 3 XLAT TABLE 指令执行后指令执行后 (AL)=33H注意注意: * 不

11、影响标志位不影响标志位* 字节表格字节表格(长度不超过长度不超过256) 首地址首地址 (BX)* 需转换代码需转换代码 (AL)(BX) 30 H F004031 H F0041 (AL) = 3 32 H F0042 33 H F0043TABLE(DS)=F000H换码指令:换码指令:XLAT 或或XLAT OPR执行操作:执行操作:(AL) ( (BX) + (AL) )2022-2-12例例3-53-5:编写一个加密:编写一个加密0 09 9数字序列的程序,设数字序列的程序,设0 0,1 1,2 2,3 3,4 4,5 5,6 6,7 7,8 8,9 9对应的密码表为:对应的密码表为

12、:9 9,0 0,8 8,2 2,7 7,4 4,6 6,3 3,1 1,5 5,键,键盘输入盘输入08082525,显示输出,显示输出91918484。DATA SEGMENTDATA SEGMENTSTRDAT DB 0STRDAT DB 0,8 8,2 2,5 5TABLE DB 9082746315TABLE DB 9082746315DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENT ASSUME CS:CODE ,DS:DATAASSUME CS:CODE ,DS:DATAGOGO: MOV AX MOV AX,DATADATA MOV DS MO

13、V DS,AXAX MOV ES MOV ES,AXAX LEA SI LEA SI,STRDATSTRDAT LEA BX LEA BX,TABLETABLEMOV CX, 4MOV CX, 4L1L1:MOV ALMOV AL,SISIXLAT XLAT MOV DL, ALMOV DL, ALMOV AH, 02MOV AH, 02INT 21HINT 21HLOOP L1LOOP L1MOV AH, 4CHMOV AH, 4CHINT 21HINT 21HCODE ENDSCODE ENDSEND GOEND GO2022-2-12DATA SEGMENTBUFFER DB 00H,1

14、2H,3BH,43H,60H,0CH COUNT EQU $-OFFSET BUFFER ($-BUFFER)MAX DB ?DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV SI,OFFSET BUFFER MOV CX,COUNT MOV AL,SI INC SI DEC CX ;比较COUNT-1次COMPA: CMP AL,SI ;找大数 JA NEXT MOV AL,SINEXT: INC SI LOOP COMPA ;比较完否? MOV MAX, AL ;保存大数例3-6:对一组

15、字节型无符号数进行比较,把最大数显示在屏幕上。2022-2-12 MOV BL,AL MOV DL,AL MOV CL,4 SHR DL,CL CMP DL,0AH JB L1 ADD DL,7L1: ADD DL,30H MOV AH,02H INT 21H ;显示高位 MOV DL,BL ;将大数送至DL AND DL,0FH ;截取其低4位 CMP DL,0AH JB L2 ADD DL,7L2: ADD DL,30H MOV AH,02H INT 21H ;显示低位 MOV AH,4CH INT 21HCODE ENDS END START 2022-2-12DATA SEGMENTB

16、UFFER DW 00H,12H,3BH,0A3H,94H,0CH COUNT DW $-OFFSET BUFFER ;或($-BUFFER)/2RUSLT DB 0DATA ENDSCODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX LEA SI,BUFFER MOVBL, 0 MOV CX,COUNT SHRCX,1COMPA: MOV AL,SI ;找大数 OR AL, 0 JNS NEXT INCBLNEXT: INC SI LOOP COMPA ;比较完否? MOV RUSLT, BL ;保存大数例3-7:统

17、计一批字型数据中负数的个数,结果放在RUSLT变量中。2022-2-12例3-8:间接转移 编写一个程序,根据输入的1-8的数字,转到8个不同的标号处进行各自的处理。即:当输入1时,则转到标号L1处,输出字母A;当输入2时,则转到标号L2处,输出字母B;当输入8时,则转到标号L8处,输出字母H。假设: 数字1-8由键盘上输入。分析: 首先将输入的ASCII码转换成对应的数字;然后根据数字,利用段内间接转移指令 JMP WORD PTRBX ,转移到对应的标号处执行。2022-2-12DATA SEGMENTTABLE1 DW L1,L2,L3,L4,L5,L6,L7,L8DATA ENDS C

18、ODE SEGMENT ASSUME CS:CODE,DS:DATASTART: MOV AX,DATA MOV DS,AX MOV AH,01H INT 21H SUB AL, 30H CMP AL,8 JA L10 DEC AL SHL AL,1 MOV AH,0 MOV SI, AX LEA BX,TABLE1 JMP WORD PTRBXSI .JMP TABLE1SI2022-2-12 L1: MOV DL,A JMP L9 L2: MOV DL,B JMP L9 L3: MOV DL,C JMP L9 L4: MOV DL,D JMP L9 L5: MOV DL,E JMP L9

19、L6: MOV DL,F JMP L9L7: MOV DL, G JMP L9 L8: MOV DL, H JMP L9L9: MOV AH, 02H INT 21HL10: MOV AH, 4CH INT 21HCODE ENDS END START2022-2-12例例3-9:数据块传送程序:将以S1为起始地址的30个字符依次传送到同数据段的以S2为起始地址的一片字节存储单元里。(例3-1) 完成操作后完成操作后自动修改自动修改SI、DI,使其指向串的下一个元素,使其指向串的下一个元素, 串操作方向由串操作方向由CLD和和STD指令设置:指令设置:CLD 地址递增方向(地址递增方向(DF=

20、0)STD地址递减方向(地址递减方向(DF=1) 字符串操作指令:字符串操作指令: MOVS str1, str2 ;(格式)将一个字节(格式)将一个字节/字从字从DS:SI ES:DI CMPS 、 SCAS、 LODS、 STOS 指令前要先将源串首地址指令前要先将源串首地址 DS:SI 目标串首地址目标串首地址 ES:DI2022-2-12需要先将串的长度存入需要先将串的长度存入CX寄存器寄存器每处理完一个元素自动使每处理完一个元素自动使CX-1,直到直到CX=0才结束才结束串传送串传送完成整个串的操作。完成整个串的操作。 REPZ 、REPNZ重复前缀重复前缀:REP MOVS S1,

21、 S2REP MOVSB / MOVSW2022-2-12DATA SEGMENTDATA SEGMENTS1 DB S1 DB ABCDEFGHIJKLMNOPQRSTUVWABCDEFGHIJKLMNOPQRSTUVWCOUNT EQU $-S1COUNT EQU $-S1S2 DB COUNT DUPS2 DB COUNT DUP(?)(?)DATA ENDSDATA ENDSCODE SEGMENTCODE SEGMENT ASSUME CS:CODE,DS:DATA,ES:DATA ASSUME CS:CODE,DS:DATA,ES:DATASTARTSTART:MOV AXMOV AX,DATADATA MOV DS MOV DS,AXAXMOV ES, AXMOV ES, AX MOV SI MOV SI,OFFSET S1OFFSET S1 MOV DI MOV DI,OFFSET S2OFFSET S2 MOV CX MOV CX,COUNTCOUNTCLDCLDNEXTNEXT: MOVS S2,S1 MOVS S2,S1 LOOP NEXT LOOP NEXT

温馨提示

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

评论

0/150

提交评论