微机原理与汇编语言,执行下面的程序段后AX=

微机原理与汇编语言,执行下面的程序段后AX=,第1张

1

TAB DB 1,2,3,4,5,6,7,8 TAB 是一字节数据区的首地址,假设为2000H

entry equ 4 伪指令 equ 可理解为 =,既令符号 entry = 4

mov bx,offset tab offset tab 就是 TAB指向的一字节数据区的首地址2000H,送BX

add bx,entry add 是加运算 既 bx=bx+entry =2000H+4=2004H ,指向数据 5

mov ax,[bx] 将 2004H和2005H单元中的单字节数据数据 5和6(两字节数据) 送

给 ax ,05 送 AL,06送 AH。低位在前,高们在后。

所以 (AX) = 0605H

2 有了第一题的经验,第二题就会做了。注意,tab DB 改为了tab dw,DW为双字节数,数同样是1,但所占空间已不同了。用 DB 定义的1 占一字节,用 DW 定义的1 却占两字节。

tab dw 1,2,3,4,5,6

entry equ 6

mov bx,offset tab 将TAB指向的一字节数据区的首地址2000H,送BX

add bx,entry bx=bx+entry =2000H+6=2006H 指向的数据是 4 (是双字节噢 )

mov ax,[bx] 2006H 单元中的双字节数据 4 送 给 ax ,所以(AX) = 0004H

;;8255硬件连接及软件设置:

;;B口方式0输入,PB0~PB3分别连接K1~K4;

;;A口方式0输出,PA0~PA3外接驱动电路控制灯的4种动作;

;;驱动电路,可由74LS06、ULN2003作反相电流放大驱动继电器或固体继电器组成;

;;C口闲置;

;;按以上设置,8255方式控制字是82H ;

;;在PC机作主机的系统中,8255的4个寄存器地址是:

;;A口60H,B口61H,方式控制寄存器63H。

;;汇编程序如下:

SSEG SEGMENT PARA STACK ;堆栈段定义

DW 30H DUP()

SSEG ENDS

CSEG SEGMENT ;代码段定义

ASSUME CS:CSEG,DS:CSEG

ORG 200h ;主程序首址

START: MOV AL, 82H ;方式控制字

MOV DX, 63H

OUT DX, AL ;方式控制字送入方式控制寄存器

Scan: IN AL,61H ;扫描从B口读入的K1~K4状态

CALL PRC1 ;开灯、关灯

CALL PRC2 ;是否暂停

CALL PRC3 ;是否换向

CALL PRC3 ;是否移动

JMP Scan ;主程序循环

PRC1 PROC NEAR ;"开/关灯" *** 作 子程序定义

PUSH AX ;B口状态进栈暂存

TEST AL,00000001B ;检测PB0输入状态

JZ CloseL ;若PB0低电平,表示K1断,转CloseL处执行

OpenL: OUT 60H,AL ;若PB0高电平,表示K1通,PA0输出高电平,开灯

JMP RT1 ;转RT1处指令返回

CloseL: MOV AL,00000000B ;PA0输出低电平

OUT 60H,AL ;关灯

RT1: POP AX ;B口状态出栈

RET ;返回主程序

PRC1 ENDP ;子程序定义完毕

PRC2 PROC NEAR ;"暂停" *** 作 子程序定义

PUSH AX ;B口状态进栈暂存

TEST AL,00000010B ;检测PB1输入状态

JZ RT2 ;若PB1低电平,表示K2断,不暂停

PAUS: OUT 60H,AL ;若PB1高电平,表示K2通,PA1输出高电平,暂停

RT2: POP AX ;B口状态出栈

RET ;返回主程序

PRC2 ENDP ;子程序定义完毕

PRC3 PROC NEAR ;"换向" *** 作 子程序定义

PUSH AX ;B口状态进栈暂存

TEST AL,00000100B ;检测PB2输入状态

JZ RT3 ;若PB2低电平,表示K3断,不换向

CHG: MOV AL,00000101B ;若PB2高电平,表示K3通

OUT 60H,AL ;PA2、PA0输出高电平、换向,灯保持亮

RT3: POP AX ;B口状态出栈

RET ;返回主程序

PRC3 ENDP ;子程序定义完毕

PRC4 PROC NEAR ;"移动" *** 作 子程序定义

TEST AL,00001000B ;检测PB3输入状态

JZ RT4 ;若PB3低电平,表示K4断,不移动

MOVE: MOV AL,00001001B ;若PB3高电平,表示K4通

OUT 60H,AL ;PA3、PA0输出高电平、移动,灯保持亮

RT4: RET ;返回主程序

PRC4 ENDP ;子程序定义完毕

CSEG ENDS ;代码段定义完毕

END START ;主程序结束

1

SS、SP

解释:堆栈 *** 作是在堆栈段(SS)的栈顶(SP)进行 *** 作的。

2

0020H

解释:LEA AX,TABLE的功能是将TABLE的偏移地址(0020H)送给寄存器AX,作为AX的内容

3

11、8

解释:2K8位表示有2K个单元,每个单元有一个地址,又因为2K是2的11次方,所以片内选择2K个单元需要有11根地址线;8位表示每个单元的数据线位数是8位,即数据线为8根

; 本程序通过编译,运行正确

Code Segment

Assume CS:Code,DS:Code

array db 23,-69,0,35,-46,57,-68,79,-89,-81,98,-43,56,-41,123,-98,102,-87,31

db -65,58,67,-25,-100,20,-26,79,-81,51,-37,-91,-63,19,-85,-62,39,-48,69

db -123,0,17,126,-111,-98,-81,-76,26,73,-75,-83

Elements equ ($-array)/Type array ;元素个数

Prompt_Str db 'Numbers of the negatives: $' ;负数个数提示信息

Start: push cs

pop ds

xor bl,bl ;计数器置0

cld

lea si,array ;取数据地址

mov cx,Elements ;元素个数

Statics: test byte ptr [si],80h ;是否负数?

jz $+4 ;不是

inc bl ;是,负数计数

inc si ;si增1,判断下一个元素

loop Statics

lea dx,Prompt_Str

mov ah,9

int 21h

clc ;清进位标志

mov cx,8 ;循环左移次数

mov ah,2

Left_Move: shl bl,1

mov dl,'1' ;

jc $+4 ;若CF=1,直接显示字符'1'

mov dl,'0' ;若CF=0,修改显示字符为'0'

int 21h ;显示一个字符

loop Left_Move

mov ah,7 ;暂停,等待用户按任意键结束程序

int 21h

Exit_Proc: mov ah,4ch ;结束程序

int 21h

Code ENDS

END Start ;编译到此结束

这个板子只有两个ic,左图左下那个8条腿的应该是个电池充电管理或电源管理ic,其他读卡播放功放这些功能应该都是上面那颗大芯片实现的,要接aux需要这个芯片支持,如图的印刷电路板走线,看上去似乎不好加装。这个板子只有两个ic,左图左下那个8条腿的应该是个电池充电管理或电源管理ic,其他读卡播放功放这些功能应该都是上面那颗大芯片实现的,要接aux需要这个芯片支持,如图的印刷电路板走线,看上去似乎不好加装。这个板子只有两个ic,左图左下那个8条腿的应该是个电池充电管理或电源管理ic,其他读卡播放功放这些功能应该都是上面那颗大芯片实现的,要接aux需要这个芯片支持,如图的印刷电路板走线,看上去似乎不好加装。这个板子只有两个ic,左图左下那个8条腿的应该是个电池充电管理或电源管理ic,其他读卡播放功放这些功能应该都是上面那颗大芯片实现的,要接aux需要这个芯片支持,如图的印刷电路板走线,看上去似乎不好加装。这个板子只有两个ic,左图左下那个8条腿的应该是个电池充电管理或电源管理ic,其他读卡播放功放这些功能应该都是上面那颗大芯片实现的,要接aux需要这个芯片支持,如图的印刷电路板走线,看上去似乎不好加装。这个板子只有两个ic,左图左下那个8条腿的应该是个电池充电管理或电源管理ic,其他读卡播放功放这些功能应该都是上面那颗大芯片实现的,要接aux需要这个芯片支持,如图的印刷电路板走线,看上去似乎不好加装。

微机原理主要讲微机的组成、各功能器件的作用及 *** 作控制方式(包括时序)、监控程序等;汇编语言主要讲数的进制、各种进制的相互转化、数在计算机中的表示方式、机器指令码及其简记的汇编码、各种汇编语言指令(包括伪指令)及其功能介绍、汇编语言编程等。

微机原理和汇编语言是密不可分的,常常是相互穿插。

JMP START 就是一个死循环呗,跳转到START那句,为的是可以多次读取开关的状态。你要是想让这个程序执行一次就退出当然也可以跳转到别的地方, 但是你没有定义STOP, 就没办法JMP了

我估计你是不是把START这个标号理解成别的什么东西了,在这里START就是个标号,代表那句“MOV DX,01F2H”的地址,没有什么别的意思, 并不是你所理解的"程序开始"

程序写的肯定不对,问题很大,没有原题没法改,最起码你第一次IN之后得把AL保存一下吧,或者每次TEST AL之前重新IN一下,要不AL都让你给改了,你TEST它有什么用啊?

之所以说没有原题没法改是因为如下原因:

一 不知道开关Ki闭合对应的是0还是1, 你的程序把我搞糊涂了

二 不知道你所谓的"其他情况,不做任何处理" 是 真的什么都不做 还是 让二极管全都不发光

三 假设开关闭合为1, 那如果开关状态是11111010的话, 我是应该让高四位的二极管发光呢还是什么都不做呢 按照我对题目的理解好像应该是让高四位发光, 如果这样的话, 楼上 zsq0325 同学的程序就有问题了, 用CMP是不行的

以上就是关于微机原理与汇编语言,执行下面的程序段后AX=全部的内容,包括:微机原理与汇编语言,执行下面的程序段后AX=、微机原理8255编程、微机原理 汇编程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址:https://www.54852.com/zz/9270479.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2023-04-26
下一篇2023-04-26

发表评论

登录后才能评论

评论列表(0条)

    保存