2024年最全第一篇汇编文章(基于8086)_8086汇编论文2000字,超详细讲解

img
img

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化的资料的朋友,可以添加戳这里获取

一个人可以走的很快,但一群人才能走的更远!不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!

实验目的:

1.掌握8253的工作原理及其应用编程。

2.掌握8255的工作原理及其应用编程。

实验步骤:

1. 扬声器控制原理

8255的地址为:60H~63H;PB端口地址为61H,控制口为63H;

8253的地址为:40H~43H;通道2地址42H,控制口地址43H。

PC的扬声器以计数器2为核心。计数器8255的CLK2的输入频率为1.193182 MHz,工作于方式3,改变计数器初值可以由得到不同频率的方波输出。

fCLK2频率:1.1931816*1000000=12 34DE H

若要使扬声器输出600Hz频率信号,则8253计数初值为1983。

对于600 Hz,N=计数初值=11931816/600=1983。

对于1000 Hz,N=计数初值=11931816/1000=1193。

改变8253的输出频率,即可改变扬声器输出声频信号频率。

(1)给定8253的OUT2输出频率,获取对应计数初值:

对于1000 Hz, 这里可以用除法实现计算:(DX,AX)=0012 34DE, (DI)=1000

(DX,AX)/DI

MOV DX,12H

MOV AX,34DEH

MOV DI, 1000

DIV  DI

这样,计数初值就在AX中。

(2) 初始化8253

MOV         AL,10110110B   ;初始化,8253计数器2,模式3,初值16位,二进制

OUT         43H,AL         ;8253的控制口地址43H

MOV         AX,1983        ;计数初值=1.19MHz, 600 Hz=1983

;MOV  DX,12H

;MOV  AX,34DEH

;MOV  DI, 600

;DIV   DI

OUT        42H, AL             ;送计数初值低位字节,8253的计数器2的地址42H

MOV        AL, AH

OUT        42H, AL             ;送计数初值高位字节

扬声器受8255A芯片B口的两个输出端线控制,PB0=1,即GATE2=1,计数器2正常计数;    PB1=1,打开输出控制门,扬声器工作。8255工作于方式0输出。

2.编辑

利用编辑器(记事本,也可采用其它编辑器)建立一个名为ASM4.ASM的文本文件,内容如下:程序1:

DATA    SEGMENT

M1  DB ‘hello!’, 0DH, 0AH, ‘$’

DATA        ENDS

CODE    SEGMENT

ASSUME  CS:CODE, DS:DATA

START:  MOV     AX,DATA

MOV     DS, AX

MOV     DX, OFFSET M1

MOV     AH, 09H

INT     21H

W1:         MOV     AH, 0BH        ;有键按下?

INT     21H

CMP     AL, 00H

JZ      W1              ;无键按下,转W1

MOV        AH, 08H         ;有键,读键值AL

INT        21H

CMP        AL, 1BH

JZ     STOP            ;是ESC键,退出

CALL    SOUND           ;不是,调用SOUND

JMP     W1

STOP:   MOV         AH, 4CH

INT                     21H ;退出系统

SOUND  PROC    NEAR

MOV         AL,10110110B   ;初始化,8253计数器2,模式3,初值16位,二进制

OUT         43H,AL         ;8253的控制口地址43H

;MOV DX,12H

;MOV AX,34DEH

;MOV DI, 600

;DIV  DI

MOV         AX,1988        ;计数初值=1.19 MHz, 600 Hz=1988

OUT         42H,AL             ;送计数初值低位字节,8253的计数器2的地址42H

MOV         AL, AH

OUT         42H,AL             ;送计数初值高位字节

;----- 8255控制程序-----

IN      AL,61H             ;读8255的PB口原输出值,61H为PB口的地址

MOV         AH,AL              ;保留到AH

OR      AL,03H             ;使PB0\PB1均为1

OUT         61H, AL             ;打开GATE2门,输出方波到扬声器

MOV     CX,0FFFFH

DELAY:  LOOP    DELAY           ;延时

MOV        AL, AH              ;取回8255的PB口原输出值

OUT     61H,AL         ;恢复8255的PB口

RET

SOUND   ENDP

CODE        ENDS

END     START

参考程序2:

ASSUME  CS:seg2,DS:seg1

seg1        SEGMENT

pstart  DB  ‘Program start.’,0DH,0AH,‘$’

pend    DB  ‘Program will end when input’

DB   27H,‘ESC’,27H,‘.’,0DH,0AH,‘$’

sec DB  10

seg1        ENDS

seg2        SEGMENT

start:  MOV AX,seg1

MOV DS,AX

MOV DX,OFFSET pstart

MOV AH,09H

INT 21H

MOV DX,OFFSET pend

MOV AH,09H

INT 21H

;--------------键盘控制-------------------

wait1:      MOV    AH,01H          ;输入一个字符=AL,DOS系统功能调用

INT     21H

CMP    AL,1BH          ;是否ESC键

JE      keyESC

CMP    AL,‘a’         ;是a键?

JE      keya                ;a键处理,初始化定时器8253

CMP        AL,‘b’

JE      keyb            ;b开启扬声器

img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

JE      keyb            ;b开启扬声器

[外链图片转存中…(img-9dxVjg2t-1715617687416)]
[外链图片转存中…(img-ix2Ak7Lz-1715617687416)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上C C++开发知识点,真正体系化!

由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新

如果你需要这些资料,可以戳这里获取

  • 10
    点赞
  • 29
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值