微机原理与汇编语言
编写程序实现下述功能的程序段:
(1) 若8个开关K7~K0全部闭合,则使8个发光二极管亮;
(2) 若开关高4位(K7~K4)全部闭合,则使连接到74LS273高4位的发光量亮;
(3) 若开关低4位(K7~K4)闭合,则使连接到74LS273低4位的发光量亮
(4) 其他情况,不做任何处理.
程序:
START: MOV DX,01F2H
IN AL, DX
CMP AL, 0H
MOV AL 0FFH
JZ DISP
TEST AL,0F0H
MOV AL 0F0H
JZ DISP
TEST AL 0FH
MOV AL 0FH
JZ DISP
JMP START
DISP: MOV DX ,01F3H
OUT DX , AL
JMP START
请问这段程序写的对么?还有为什么START和DISP最后是JMP START为什么不写成JMP STOP呢?如果START和DISP最后写成JMP STOP可以么?请高手帮我解答一下谢谢 展开
我估计你是不是把START这个标号理解成别的什么东西了,在这里START就是个标号,代表那句“MOV DX,01F2H”的地址,没有什么别的意思, 并不是你所理解的"程序开始".
程序写的肯定不对,问题很大,没有原题没法改,最起码你第一次IN之后得把AL保存一下吧,或者每次TEST AL之前重新IN一下,要不AL都让你给改了,你TEST它有什么用啊?
之所以说没有原题没法改是因为如下原因:
一 不知道开关Ki闭合对应的是0还是1, 你的程序把我搞糊涂了.
二 不知道你所谓的"其他情况,不做任何处理" 是 真的什么都不做 还是 让二极管全都不发光
三 假设开关闭合为1, 那如果开关状态是11111010的话, 我是应该让高四位的二极管发光呢还是什么都不做呢? 按照我对题目的理解好像应该是让高四位发光, 如果这样的话, 楼上 zsq0325 同学的程序就有问题了, 用CMP是不行的.
前者:cpu是靠执行二进制机器代码来工作的,也就是控制微机可以考000000这样的二进制代码,但是考虑到这样的指令代码难以记住,程序可读性很差,不是专业人才基本不用掌握这种,于是又有了汇编,汇编是一种高级语言,但是对于其他高级来说是低级语言,它其实是与二进制指令相映射的,而汇编标识符易于记忆,程序可读性好,而且学会汇编编程,能够很好掌握CPU内部结构等,但是不同的CPU有不同的指令。
后者:微机原理是一门课程,一般就讲数制基础知识,CPU硬件结构,对应汇编语言,汇编程序编程结构,还有存储器啊,I/O,外围芯片等,所以,汇编语言其实只是微机原理这么课程的一部分,它是人与CPU沟通的媒介,学会汇编语言或者其他高级语言才能操作CPU吧
不知道满意否,你可以自己组织一下下,呵呵
汇编语言(assembly language)是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符(Mnemonics)代替机器指令的操作码,用地址符号(Symbol)或标号(Label)代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。普遍地说,特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。[1]
许多汇编程序为程序开发、汇编控制、辅助调试提供了额外的支持机制。有的汇编语言编程工具经常会提供宏,它们也被称为宏汇编器。
汇编语言不像其他大多数的程序设计语言一样被广泛用于程序设计。在今天的实际应用中,它通常被应用在底层,硬件操作和高要求的程序优化的场合。驱动程序、嵌入式操作系统和实时运行程序都需要汇编语言。
jmp START 这是又跳转的首部了 这个就是无限循环了
用74LS244作为输入接口(端口地址:01F2H)连接8个开关K0~K7,
用74LS273作为输出接口(端口地址:01F3H)连接8个发光二极管。
编写程序实现下述功能的程序段:
(1) 若8个开关K7~K0全部闭合,则使8个发光二极管亮;
(2) 若开关高4位(K7~K4)全部闭合,则使连接到74LS273高4位的发光量亮;
(3) 若开关低4位(K7~K4)闭合,则使连接到74LS273低4位的发光量亮;
(4) 其他情况,不做任何处理。
--------------------------------
程序如下:
START:
MOV DX, 01F2H
IN AL, DX ;读入开关状态
MOV BL, AL ;保存
CMP AL, 0 ;全按下?
JZ DISP1 ;去输出全亮
AND AL, 0F0H ;保留高四位
CMP AL, 0F0H ;高四位全按下?
JZ DISP2 ;去输出高四位亮
MOV AL, BL ;恢复数据
AND AL, 0FH ;保留低四位
CMP AL, 0FH ;低四位全按下?
JZ DISP3 ;去输出低四位亮
JMP START ;其他情况,不做任何处理
DISP1:
MOV AL, 0 ;全亮
JMP DISP ;去显示
DISP2:
MOV AL, 0FH ;高四位亮
JMP DISP ;去显示
DISP2:
MOV AL, 0F0H ;低四位亮
DISP:
MOV DX, 01F3H
OUT DX, AL ;输出显示
JMP START ;显示完成,重新去检测
END