gpt4 book ai didi

assembly - Intel 8085 程序集中的位移操作有什么作用?

转载 作者:行者123 更新时间:2023-12-04 08:51:01 33 4
gpt4 key购买 nike

我试图向自己解释以下 8085 汇编代码

我有这个代码要求输入两个数字(来自 IDE 中的虚拟键盘)并在 LED 7 和 8 上显示它们:

.ORG 0000

CALL DATA
MOV C,A
CALL PRNT

CALL DATA
MOV E,A
CALL PRNT

MVI D,00H
MOV L,E
MVI H,00H

MOV A,C
DCR A
JUMP:
DAD D
DCR A
JNZ JUMP

MOV A,L
DAA
JMP IMPR

RET

DATA:
MVI A,00000000B
OUT 00H
IN 00H
RLC
RLC
RLC
RLC
ANI F0H
MOV B,A
MVI A,00000000B
OUT 00H
IN 00H
ANI 0FH
ORA B
RET

IMPR:
MOV B,A

ANI F0H
RLC
RLC
RLC
RLC
CALL NUMZ
OUT 06H
MOV A,B
ANI 0FH
CALL NUMZ
OUT 07H
RET

NUMZ:
CPI 00H
JNZ ONE
MVI A,01110111B
JMP EXIT

ONE:
CPI 01H
JNZ TWO
MVI A,01000100B
JMP EXIT

TWO:
CPI 02H
JNZ THREE
MVI A,00111110B
JMP EXIT

THREE:
CPI 03H
JNZ FOUR
MVI A,01101110B
JMP EXIT

FOUR:
CPI 04H
JNZ FIVE
MVI A,01001101B
JMP EXIT

FIVE:
CPI 05H
JNZ SIX
MVI A,01101011B
JMP EXIT

SIX:
CPI 06H
JNZ SEVEN
MVI A,01111011B
JMP EXIT

SEVEN:
CPI 07H
JNZ EIGHT
MVI A,01000110B
JMP EXIT

EIGHT:
CPI 08H
JNZ NINE
MVI A,01111111B
JMP EXIT

NINE:
CPI 09H
JNZ SAL
MVI A,01001111B
JMP EXIT

EXIT:
RET

我不包括 PRNT因为这对我的问题不重要。

我明白 .ORG 0000这是程序的开始 - 就像 BEGIN在帕斯卡。
CALL DATA是一个子程序,它用二进制零填充累加器并在端口 0(十六进制的 00H)中显示它们(?),然后它(从虚拟键盘)获取一个数字,然后在位移操作中向左旋转。

我的问题是为什么?这样做有什么意义?有什么好处?我在维基百科上读过它,但我仍然不明白。它在这段代码中做了什么,为什么需要它?

最佳答案

DATA子程序正在加载两个 ASCII 十进制字符并将它们组成一个两位数 BCD值(value)。它将第一个字符左移 4 位,只保留 LS 4 位,然后将第二个字符的 LS 4 位放入结果的 LS 4 位。

在 C 中,这大致相当于:

char c = getchar();             // get first ASCII decimal character
char result = (c << 4) & 0xf0; // shift into MS nybble of result and mask
c = getchar(); // get second ASCII decimal characters
result = result | (c & 0x0f); // mask and inset into LS nybble of result
return result;

请注意,屏蔽除 ASCII 十进制字符的 LS nybble 之外的所有内容都会为您提供其十进制等效值,例如ASCII '4' = 0x34 => 0x04。

为了帮助清楚这一点,我绘制了一个图表,它逐步显示了当用户输入数字“69”时会发生什么,即 ASCII '6' 后跟 ASCII '9',因为这两个字符被屏蔽并组合为给出数字 69 的 BCD 表示:

enter image description here

关于assembly - Intel 8085 程序集中的位移操作有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7737246/

33 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com