【发布时间】:2015-11-03 15:03:14
【问题描述】:
MTS-88.C 和 I/O BOARD -08 板载有 8 个(八个)7 段显示器和 20 个键盘。显示器编号从 7-SEG.1 到 7-SEG.8,分别连接到端口 B 的 PB7 到 PB0 线。要在 7 段显示器上显示一个字符,必须将一个字节写入端口 B。MSB 4 位是 7 段显示器的地址,LSB 4 位是数据。因此,如果我们将 58 H 写入端口 B,那么第 6 个 7 段显示器将显示数据 8。
20 个键盘从 P01 到 P20 编号,排列为 5 列 4 行。最右边的列连接到 PB0,而最左边的列连接到 PB4。最上面一行连接到 PA0,而最下面一行连接到 PA3。为了检测按键,首先必须通过向端口 B 写入一个字节来激活一列。接下来,应该读取端口 A。第 1、2、3 和 4 行的有效值分别为 1、2、4 和 8。
实验是读取键盘并在指定的7段显示器上显示按下的键id。在这个实验中,我还没有理解下面显示的汇编代码中的一些行。在我没看懂的那些行旁边我做了cmets。
MEMORY ADDRESS ASSEMBLY CODE
0000:0476 MOV AL,90
0000:0478 OUT 13,AL
0000:047A MOV DL,00
0000:047C MOV CX,0004H //why storing 4 here
0000:047F MOV AL,0F
0000:0481 MOV BL,CL
0000:0483 SHL BL,01 //why left shift for 4 times
0000:0485 SHL BL,01
0000:0487 SHL BL,01
0000:0489 SHL BL,01
0000:048B OR AL,BL //why doing OR operation here
0000:048D OUT 11,AL
0000:048F IN AL,10
0000:0491 MOV BL,01
0000:0493 TEST AL,BL //what is testing here
0000:0495 JE O4A7 //when we are jumping(what is the condition)
0000:0497 INC DL // what are we storing in DL
0000:0499 CMP DL,09
0000:049C JG 047A //why are we comparing DL with 9
0000:049E SHL BL,01
0000:04A0 TEST BL,10 //what is being tested here
0000:04A3 JE 0493
0000:04A5 LOOP O47F
0000:04A7 MOV AL,DL
0000:04A9 OUT 11,AL
0000:04AB PUSH CX
0000:04AC MOV CX,500
0000:04AF NOP //why is this operation needed
0000:04B0 LOOP 04AF
0000:04B2 POP CX
0000:04B3 JMP 047A
我在上面标记的那些行实际上做了什么?
【问题讨论】:
-
请不要破坏问题。
标签: assembly microcontroller x86-16 microprocessors