
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编程、微机原理 汇编程序等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)