微机8086 帮忙改一下下面的程序,将程序输入端控制均改为用拨动开关K1,K2 ,K3控制

微机8086 帮忙改一下下面的程序,将程序输入端控制均改为用拨动开关K1,K2 ,K3控制,第1张

你是说,把开关的状态变换认为是“接通”对吗?如果,“开始”高电平,变成接地也能开始对吗?

按这个理解帮你改一下,方法是悔芹:

程序启时,先存一下初始状态,以后用变化的判断来触发。

另,我这里没有汇编工具,没有调试。有问题我们再讨论

stt segment stack

db 64 dup (0)

stt ends

data segment

++++++++++++++++

kStart db 0

kReset db 0

kPause db 0

+++++++++++++++++

data ends

code segment

assume cs:code,ds:data,ss:stt

start:

mov ax,data

mov ds,ax

mov al,89h ;控制字的写入,A口输出,C口输入,B口输出

out 63h,al

mov al,0ffh

out 62h,al

++++++++++++++++++

in al,62h

push ax

and al,8

mov [kStart],al

pop ax

push ax

and al,10h

mov[kPause],al

popax

and al,1

mov [kReset],al

+++++++++++++++++++

a1: mov al,30h ;管脚清零

out 60h,al

mov al,6fh

out 61h,al

a2: in al,62h ;开始

++++++++++++++++

test al,08h -----------

andal,8

xoral,[kStart]判状态变了没,如果目前的状态与之前保存的一样,说明没有变

jnz a2 -------------

jza2

mov[kStart],al 保存新的状态

+++++++++++++++++

call delay1

mov al,7fh

out 61h,al

call delay1

mov al,07h

out 61h,al

call delay1

mov al,7dh

out 61h,al

call delay1

mov al,6dh

out 61h,al

call delay1

mov al,66h

out 61h,al

call delay1

mov al,4fh

out 61h,al

call delay1

mov al,5bh

out 61h,al

call delay1

mov al,06h

out 61h,al

call delay1

mov al,3fh

out 61h,al

call delay1

delay1 proc秒延时

push cx

mov cx,0ffffh

YS:in al,62h 暂停循环

++++++++++++++++

test al,10h -----------

andal,10h

xoral,[kPause]判状态变了没,如果目前的状态与之前保存的一样,说明没有变

jz YS

mov [kPause],al

+++++++++++++++++

in al,62h 复位跳神袜转至显示"9"

++++++++++++++++

test al,1 -----------

andal,1h

xoral,[kReset]判状态变了没,如果目前游前激的状态与之前保存的一样,说明没有变

jza1 注意,我搞不太清楚你的RESET的功能是什么,如果和你想的不一样,改成JNZ

+++++++++++++++++

test al,01h -------------

jz a1-------------

loop YS

pop cx

ret

delay1 endp

code ends

end start

DATA SEGMENT

TABLE DB 10H,34H,45H,0FDH,0,0,87H,95H,23H,0CDH 十个数

ZERO DB ?零的个数

PLUS DB ? 正数的个数

MINUS DB ? 负数个数

DATA ENDS

CODE SEGMENT

ASSUME CS:CODE,DS:DATA

START:

MOV AX,DATA

MOV DS,AX 初始化段寄存器

LEA BX,TABLE 取地址指针

MOV CX,10 判断次数

MOV DX,0 DX寄存器清零

BEG:

MOV AL,[BX] 将TABLE中的数移入AL寄存器中

CMP AL,0 和零比较

JL MIN 小于0则跳转MIN

CMP AL,0 否则在进行比较

JG PLS 大镇雹于肢旅手0则跳转PLS

JMP NEXT 无条件跳转NEXT

PLS:

INC DL 正数个数加一

JMP NEXT无条件跳转NEXT

MIN:

INC DH负数个数加一

NEXT:

INC BX 每比较一次,地址指针加一,指向下一个数

LOOP BEG

MOV PLUS,DL 将历嫌正数个数存入PLUS存储单元

MOV MINUS,DH将负数个数存入MINUS单元

MOV AH,10

SUB AH,DL

SUB AH,DH 剩下的只有0的个数

MOV ZERO,AH 零的个数移入ZERO存储单元

MOV AH ,4CH

INT 21H 返回DOS

CODE ENDS

END START

测试过了,可以生成exe,并且能调试通过,不懂可以hi我。。。


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

原文地址: https://outofmemory.cn/yw/8272115.html

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

发表评论

登录后才能评论

评论列表(0条)

保存