求用汇编语言编写拆字程序

求用汇编语言编写拆字程序,第1张

ORG 0000H

AJMP MAIN

ORG 0100H

MAIN: MOV DPTR,#4000H

MOVX A,@DPTR

MOV B,A (4000H)

SWAP A 交换

ANL A,#0FH 屏蔽高位

INC DPTR

MOVX @DPTR,A送4001H

INC DPTR

MOV A,B

ANLA,#0FH (4000)内容屏蔽高位

MOVX @DPTR,A 送4002H

SJMP $

END

8255参考程序

.486

DATA SEGMENT AT 0 USE16

PORTA EQU 203H A口

PORTB EQU 207H B口

PORTC EQU 20BH C口

CONTROL EQU 20FH 控制口

PORT1 EQU 340H 七段码段地址

PORT2 EQU 360H 七段码位地址

ORG 4200H

DATA1 DB 6 DUP (?) 输入数据

ORG 4210H

DATA2 DB 6 DUP (?) 显示缓冲区

DATAENDS

CODESEGMENT USE16

ASSUME CS:CODE,DS:DATA,ES:DATA

ORG 2000H

BEG: JMP START

TAB DB 3FH,06H,5BH,4FH,66H,6DH,7DH,07H,7FH

DB 67H,77H,7CH,39H,5EH,79H,71H 段码表

START: MOV AX,DATA 初始化

MOV DS,AX

MOV ES,AX

MOV AX,0

MOV SS,AX

MOV SP,1000H

LEA DX,CONTROL ...8255初始化

MOV AL,10001001B ...

OUT DX,AL ..清显示

MOV DX,PORTA....

MOV AL,00H ....

OUT DX,AL...

LP:

LEA DX,PORTC ...AL= 读数据

IN AL,DX ...

LEA SI,DATA1 ...存数据

MOV [SI],AL ...

CALL CZ 调用拆字子程序

CALL DISP 调用显示子程序

JMP LP 循环取数显示

CZ PROC

PUSH CX

LEA SI,DATA1 SI= 拆字,取数

LEA DI,DATA2 DI= 显示缓冲区首址

CZ0:

MOV BL,[SI]

AND BL,0F0H BL=

MOV CL,4

ROL BL,CL

MOV [DI],BL (DI)=

INC DI

MOV BL,[SI]

AND BL,0FH BL=

MOV [DI],BL

INC SI

INC DI

CMP SI, 08H....

JBE CZ0

POP CX

RET

CZ ENDP

DISP PROC 显示子程序

PUSH CX

PUSH DX

LEA BX,TAB

LEA SI,DATA2

MOV AH,0C1H

DISP1:

MOV DX,PORT2

MOV AL,AH

OUT DX,AL AL= , AL= 位输出

MOV DX,PORT1

MOV AL,[SI]

XLAT

OUT DX,AL AL=,AL= 段输出

MOV CX,0200H

LOOP $

INC SI

SAL AH,1

OR AH,0C0H

CMP AH,0C0H

JNZ DISP1

POP DX

POP CX

RET

DISP ENDP

CODE ENDS

END BEG

用8255扩展I/O口显示6位的显示码。希望对你有帮助,

CODESEGMENT;

ASSUME CS:CODE,DS:CODE,ES:CODE;以上是给代码段和数据段段地址赋值

ORG 3020H;代码从此地址开始

S2: MOV BX,4000H

MOV AL,[BX]

MOV AH,AL;以上三句代表将4000h(偏移地址)内容送到al 和ah中

MOV CL,4 ;设置右移次数

SHR AH,CL ;将ah中数据右移4次 就是将数据第四位舍去高四位放到第四位上 而高四位变为0

INC BX ;bx指向4001h

MOV [BX],AH ;将ah中移动好的数据放到4001h中 就是原来数据的高四位

AND AL,0FH ;保留al中数据低4位 高四位舍去

INC BX ;bx指向4002h

MOV [BX],AL;将al中数据放到4002h 就是原来数据的第四位

JMP $ ;停机

CODEENDS ;代码结束

END S2;程序结束

-----------------清零程序---------------------------

CODESEGMENT

ASSUME CS:CODE,DS:CODE,ES:CODE

ORG 3000H;前面你懂得

S1: MOV BX,4000H

MOV Al,00H ;al清零

MOV CX,0010H;循环次数16次

L1: MOV [BX],AX;将al中数据(地位都是0)放到bx中内容为地址的内存中(4000h)

INC BX ;指向内存中下一个单元

not al; 将al内容去反

LOOP L1;循环16次

JMP $;后面你懂得。

CODEENDS

END S1


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

原文地址: http://outofmemory.cn/yw/11588697.html

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

发表评论

登录后才能评论

评论列表(0条)

保存