8086的汇编语言程序设计编程举例课件.ppt

上传人:rrsccc 文档编号:10346912 上传时间:2021-05-10 格式:PPT 页数:45 大小:141.50KB
返回 下载 相关 举报
8086的汇编语言程序设计编程举例课件.ppt_第1页
第1页 / 共45页
8086的汇编语言程序设计编程举例课件.ppt_第2页
第2页 / 共45页
8086的汇编语言程序设计编程举例课件.ppt_第3页
第3页 / 共45页
8086的汇编语言程序设计编程举例课件.ppt_第4页
第4页 / 共45页
8086的汇编语言程序设计编程举例课件.ppt_第5页
第5页 / 共45页
点击查看更多>>
资源描述

《8086的汇编语言程序设计编程举例课件.ppt》由会员分享,可在线阅读,更多相关《8086的汇编语言程序设计编程举例课件.ppt(45页珍藏版)》请在三一文库上搜索。

1、8086的汇编语言程序设计编程举例,1,3.3.6 汇编语言程序举例,例1:将ASCII码表示的两位16进制数转换成一字节二进制数。 算法:41H,36H(A6H)1010 0110B,一位位进行 程序: DATA SEGMENT ASHEX DB 41H,36H BIN DB ? DATA ENDS,8086的汇编语言程序设计编程举例,2,CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX, DATA MOV DS,AX MOV SI,OFFSET ASHEX MOV AL,SI SUB AL,30H CMP AL,0AH JB NEXT1 S

2、UB AL,7 NEXT1: MOV CL,4 SAL AL,CL MOV BL,AL;存高位,8086的汇编语言程序设计编程举例,3,INC SI MOV AL,SI SUB AL,30H CMP AL,0AH JB NEXT2 SUB AL,7 NEXT2:OR AL,BL;合并 MOV BIN,AL MOV AH,4CH INT 21H CODE ENDS END START,8086的汇编语言程序设计编程举例,4,例2: 编程实现,将ASCII码表示的5位十进制数(65535)转换成两字节二进制数。 分析: BX=9625=(0*10+9)*10+6)*10+2*10+5 程序: DA

3、TA SEGMENT ASDEC DB 33H,39H,36H,32H,35H COUNT EQU $-ASDEC BIN DW ? DATA ENDS,8086的汇编语言程序设计编程举例,5,CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX, DATA MOV DS,AX MOV SI,OFFSET ASDEC MOV CX,COUNT XOR AX,AX AGAIN: ADD AX,AX MOV BX,AX ADD AX,AX ; MOV CL,2 ADD AX,AX ;SAL AX,CL ADD AX,BX ;CL需保护,8086的汇编语

4、言程序设计编程举例,6,MOV BH,0 MOV BL,SI SUB BL,30H ADD AX,BX INC SI LOOP AGAIN MOV BIN,AX MOV AH,4CH INT 21H CODE ENDS END START,8086的汇编语言程序设计编程举例,7,XCHG AX,BX;保存到BX MOV CX,10 ;BX*10 MUL CX XCHG AX,BX ADD BX,AX,8086的汇编语言程序设计编程举例,8,例3:将16位二进制数转换成用ASCII码表示的5位十进制数。 算法:依次减10000,1000,1,够减,计数,不够减,恢复,然后,计数结果转ASCII码

5、。 程序: DATA SEGMENT BIN DW 358H ASDEC DB 5DUP(?) PWTAB DW 10000,1000,100,10,1 DATA ENDS,8086的汇编语言程序设计编程举例,9,CODE SEGMENT ASSUME CS:CODE,DS:DATA START: MOV AX, DATA MOV DS,AX MOV DI,OFFSET ASDEC MOV SI,OFFSET PWTAB MOV AX,BIN LOP1: XOR CL,CL MOV BX,SI LOP2: SUB AX,BX JB NEXT INC CL,8086的汇编语言程序设计编程举例,1

6、0,JMP LOP2 NEXT: ADD AX,BX;不够减,恢复 ADD CL,30H ;转成ASCII码 MOV DI,CL INC SI INC SI INC DI CMP BX,1 JNZ LOP1 MOV AH,4CH INT 21H CODE ENDS END START,8086的汇编语言程序设计编程举例,11,例4:将4字节的组合BCD码分为4个单字节数相加,从低字节开始,进行4次循环操作. 程序如下: DATA SEGMENT BCD1 DB 76H,54H,38H,29H BCD2 DB 49H,37H,65H,17H SUM DB 4 DUP(?) DATA ENDS,8

7、086的汇编语言程序设计编程举例,12,STACK SEGMENT STACK STACK STAK DB 10 DUP(?) TOP EQU LENGTH STAK STACK ENDS CODE SEGMENT ASSUME CS:CODE,DS:DATA,SS:STACK BCDADD:MOV AX, SEG DATA MOV DS,AX MOV SI,OFFSET BCD1 MOV BX,OFFSET BCD2 MOV DI, OFFSET SUM MOV CL,4 CLC,8086的汇编语言程序设计编程举例,13,AGAIN: MOV AL,SI ADC AL,BX DAA MOV

8、DI,AL INC SI INC BX INC DI DEC CL JNZ AGAIN MOV AX,4C00H INT 21H CODE ENDS END BCDADD,8086的汇编语言程序设计编程举例,14,例5:编程实现,把从键盘输入的0FFFFH的十六进制正数转换为十进制数并从屏幕上显示出来。 调用HEXIBIN和BINIDEC两个子程序。用Ctrl Break退出。 主程序: display equ 02H key_in equ 01H doscall equ 21H crlf 宏指令定义同前。,8086的汇编语言程序设计编程举例,15,Main proc far main1 ca

9、ll hexibin crlf call binidec crlf jmp main1 ret main endp hexibin改成子程序。,8086的汇编语言程序设计编程举例,16,ERROR DB ERROR!,0DH,0AH,$ . hexibin PROC XOR BX,BX NEWCHAR: MOV AH,KEY_IN INT DOSCALL SUB AL,30H JB KKK CMP AL,0AH JB GETS,8086的汇编语言程序设计编程举例,17,CMP AL,11H JB KKK SUB AL,07H CMP AL,0FH JBE GETS CMP AL,2AH JB

10、KKK CMP AL,2FH JA KKK SUB AL,20H GETS: MOV CL,04H SHL BX,CL,8086的汇编语言程序设计编程举例,18,XOR AH,AH ADD BX,AX JMP GGG KKK: MOV AH,09H MOV DX,OFFSET ERROR INT 21H PUSH DX CRLF POP DX RET hexibin ENDP,8086的汇编语言程序设计编程举例,19,binidec proc mov cx,10000 call dec_div mov cx,1000 call dec_div mov cx,100 call dec_div m

11、ov cx,10 call dec_div mov cx,1 call dec_div ret,8086的汇编语言程序设计编程举例,20,dec_div proc mov ax,bx ;被除数放DX,AX mov dx,0 div cx mov bx,dx ;余数到BX mov dl,al ;显示商,而商10 add dl,30h mov ah,display int doscall ret dec_div endp,8086的汇编语言程序设计编程举例,21,3.3.7 DOS系统功能调用和ROM BIOS中断调用,1、DOS调用(磁盘操作系统调用) 由软盘或硬盘提供的,比BIOS用起来更方便

12、,因提供了更多更必要的测试。且对硬件依赖性更少。 中断类型号:20H27H,8086的汇编语言程序设计编程举例,22,1)功能:向用户提供各种操作命令和许多系统功能调用。主要功能: (1)磁盘的读写、控制 (2)内存管理、文件操作和目录操作 (3)基本输入输出管理(如键盘、打印机、显示器、磁盘等管理),还有时间、日期等子程序。 需要时可直接调用84个功能子程序。,8086的汇编语言程序设计编程举例,23,DOS的两个主要模块 (1)输入输出设备处理程序IBMBIO.COM 提供DOS到ROM BIOS的低级接口,完成 内存外设的数据传送。 (2)文件管理和系统调用程序IBMDOS.COM 高级

13、文件系统接口,在DOS下运行的程序可调用。,8086的汇编语言程序设计编程举例,24,例:完成一个用户程序请求,输入输出时各关系如下: 用户程序 高级DOS 低级DOS ROM 注意:有些情况既能选DOS中断也可选择BIOS中断来完成。尽量使用DOS,而BIOS更靠近硬件。 例:打印机输出一个字符,可用DOS 21H的功能5或BIOS 17H的功能0。 但有些DOS中断不能提供。如声音控制、某些状态等。调用方法同前,但若需子功能号,还要送AL。,对I/O的 程序请求,IBMDOS.COM,IBMBIO.COM,BIOS,外设,8086的汇编语言程序设计编程举例,25,2)调用方法 (1)入口参

14、数送指定寄存器(需要时) (2)功能号送AH (3)INT 21H 结果是出口参数送指定寄存器。 3)基本功能调用 (1)键盘输入(1号调用) 功能:等待从键盘输入一字符。用CTRL-Break( CTRL-C)停止运行,用TAB键,光标移动8个字符位置。不需入口参数。 例:带显示的 MOV AH,01H INT 21H 出口参数:字符的ASCII码在AL中。,8086的汇编语言程序设计编程举例,26,例2:不带显示的一字符键盘输入。 MOV AH,07H INT 21H (2)打印输出(5号调用) 功能:把DL中的字符输出到打印机上。 例:MOV DL,A MOV AH,5 INT 21H

15、(3)直接控制台输入/输出(6号调用) 功能:从标准输入设备输入字符,或向屏幕上输出字符,但不检查CTRL-Break。,8086的汇编语言程序设计编程举例,27,当DL=FFH时,表示从键盘输入 若ZF=0,AL=字符值 ZF=1,无键按下,AL中非字符值 当DL非FFH,向屏幕输出DL中的字符 例:从键盘输入字符。 MOV DL,0FFH MOV AH,6 INT 21H (4)输出字符( 2号调用) 功能:显示一个字符。DL中是字符的ASCII码。 例: MOV DL,A MOV AH,02H INT 21H,8086的汇编语言程序设计编程举例,28,(5)输出字符串( 9号调用) 功能

16、:显示以DS:DX指向内存中以$结束的字符串。 例:显示:ABCDEFGHIJ DATA SEGMENT BUF DB ABCDEFGHIJ,0DH,0AH,$ DATA ENDS CODE MOV AX,DATA MOV DS,AX MOV DX,OFFSET BUF MOV AH,09H INT 21H .,8086的汇编语言程序设计编程举例,29,(6)字符串输入(0AH号调用) 功能:从键盘 接收一串字符到输入缓冲区,但 应先建立一个缓冲区。 例:BUF DB 100 ;最大长度 DB ? ;保留,输入完填入 DB 100 DUP(?),能保存的数 实际输入数 (返回时填入),回车键,

17、0D,8086的汇编语言程序设计编程举例,30,MOV AX,DATA MOV DS,AX MOV DX,OFFSET BUF MOV AH,0AH INT 21H 当实际输入长度超过最大长度时,后边字符略去且响铃,直到输入回车符。 (7)日期设置(2BH调用) 功能:CX=年号(19802099) DH=月号(112) DL=日号,8086的汇编语言程序设计编程举例,31,若日期有效,设置成功 AL=0 否则 AL=0FFH 例:设置日期2003年11月28日 MOV CX,2003 MOV DH,11 MOV DL,28 MOV AH,2BH INT 21H,8086的汇编语言程序设计编程

18、举例,32,2、ROM BIOS中断调用,BIOS调用(基本输入输出系统调用)功能: 系统加电自检 引导装入 主要I/O设备的处理程序 接口控制等 中断类型码:081FH 见表4-2。 编好程序放在内存较高地址区域 FE000HFFFFFH(8KROM)中, 用时不必要了解硬件I/O接口的特性,只要设置参数,然后送功能号,再中断调用即可。一个功能号对应一个子功能。,8086的汇编语言程序设计编程举例,33,例:键盘I/O中断调用(16H),有三个功能,功能号在AH中。 (1)AH=0 功能:从键盘读入字符送AL 出口参数:AL=输入字符的ASCII码值 例:MOV AH,0 INT 16H 设

19、按下A,则AL=41H (2)AH=1 功能:从键盘读入字符送AL并置ZF ZF=0,按键 ZF=1,未按键 出口参数:若ZF=0,AL=输入字符的ASCII码值,8086的汇编语言程序设计编程举例,34,(3)AH=2 功能:读取特殊功能键的状态 出口参数:AL=特殊功能键的状态 b7INS b6CAPS b5NUM b4SCROLL b3ALT b2CTL b1左边的SHIFT b0-右边的SHIFT,8086的汇编语言程序设计编程举例,35,例1:从键盘输入放在DX中,ERROR DB ERROR!,0DH,0AH,$ . GETNUM PROC PUSH CX XOR DL,DL ;X

20、OR DX,DX GGG: MOV AH,01H INT 21H CMP AL,0DH JZ PPP SUB AL,30H JB KKK CMP AL,0AH,8086的汇编语言程序设计编程举例,36,JB GETS CMP AL,11H JB KKK SUB AL,07H CMP AL,0FH JBE GETS CMP AL,2AH JB KKK CMP AL,2FH JA KKK SUB AL,20H GETS: MOV CL,04H SHL DX,CL,8086的汇编语言程序设计编程举例,37,XOR AH,AH ADD DX,AX JMP GGG KKK: MOV AH,09H MOV

21、 DX,OFFSET ERROR INT 21H PPP: PUSH DX CRLF POP DX POP CX RET GETNUM ENDP,8086的汇编语言程序设计编程举例,38,例2:字符匹配程序,用串操作指令设计程序,实现在指定存储区(长度为100H)中寻找匹配字符(20H),退出时给出是否找到的信息。 data segment mess1 db ok!has found!,0dh,0ah,$ mess2 db no space character!, 0dh,0ah ,$ datarea db . data ends,8086的汇编语言程序设计编程举例,39,mov ax,dat

22、a mov ds,ax mov es,ax lea di,datarea cld mov cx,100h mov al,20h repnz scasb jnz aaa,8086的汇编语言程序设计编程举例,40,mov ah,09h mov dx,offset mess1 int 21h jmp bbb aaa: mov ah,09h mov dx,offset mess2 int 21h bbb: hlt,8086的汇编语言程序设计编程举例,41,例3:显示BL中的内容,DISPP PROC MOV DL,BL MOV CL,04H ROL DL,CL AND DL,0FH ADD DL,30

23、H CMP DL,3AH JB DDD ADD DL,07H,8086的汇编语言程序设计编程举例,42,DDD: MOV AH,02H INT 21H MOV DL,BL AND DL,0FH ADD DL,30H CMP DL,3Ah JB DDD1 ADD DL,07H DDD1: MOV AH,02H INT 21H RET DISPP ENDP,8086的汇编语言程序设计编程举例,43,例4: 试编制一个程序把BX寄存器内的二进制数用十六进制数形式在屏幕上显示出来。 主要程序: DISPP PROC MOV CH,4 ROTATE: MOV CL,4 ROL BX,CL MOV DL,BL AND DL,0FH ADD DL,30H CMP DL,3AH;CMP AL,39H JL PRINTIT ;JBE PRINTIT,8086的汇编语言程序设计编程举例,44,ADD DL,07H PRINTIT: MOV AH,02H INT 21H DEC CH JNZ ROTATE RET DISPP ENDP,8086的汇编语言程序设计编程举例,45,

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

当前位置:首页 > 社会民生


经营许可证编号:宁ICP备18001539号-1