[!FAQ] 3.16 若接口02E0H的BIT2和BIT5同时为1,表示外设接口02E7H有一个准备好的8位数据。当CPU从该接口读走数据后,02E0H接口的BIT2和BIT5就不再同时为1;只有当又有一个准备好的数据时他们才再次同时为1.
- 试编程序, 从上述接口读入32个数据,顺序放在以A0100H单元开始的各单元中
MOV CX, 32 MOV BX, A0100H AGAIN: MOV DX, 02E0H IN AL,DX AND AL, 10010H CMP AL, 10010H JZ READ JMP AGAIN READ: MOV DX, 02E7H IN AL, DX MOV [BX], AL INC BX DEC CX JZ END JMP AGAIN END: HLT
[!FAQ] 3.17 在内存以4000H开始的16KB单元中存放一组数据,试编程序将它们顺序搬移到以A0000H开始的顺序16KB单元中
DATA DS 4000H MOV ES, A000H MOV CX, 16384 MOV SI, 0 MOV DI, 0 LOOP: MOV [DI], [SI] DEC CX JZ DONE INC SI JMP LOOP DONE: HLT
[!FAQ] 3.18 在上题的基础上,将两个数据块逐个单元进行比较,若有错将BL置为00H,全对则置为FFH,试编程序
DATA DS 4000H MOV ES, A000H MOV CX, 16384 MOV SI, 0 MOV DI, 0 LOOP: CMP [DI], [SI] JNE ERROR DEC CX JZ DONE INC SI INC DI JMP LOOP ERROR: MOV BL, 00H JMP DONE DONE: HLT
[!FAQ] 3.19 编写一个子程序,对AL中的数据进行偶校验,并将经过校验的结果放回AL
MOV AL, 0x55 ENEN_PARITY: XOR BX, BX ; BX用来记录1的个数 MOV CX, 8 COUNT_LOOP TEST AL, 1 JZ NO_INCREMENT INC BX NO_INCREMENT: SHR AL, 1 ; 右移一位 LOOP COUNT_LOOP TEST BX, 1 ; 如果是奇数(ZF=0),则需要在AL的最低位设置为1来保证偶校验 JZ CORRECT SHL AL, 1 ADD AL, 1 JMP DONE CORRECT: SHL AL, 1 DONE: RET
[!FAQ] 3.20 利用上题的子程序,对以80000H开始的256个单元的数据加上偶校验,试编程序
MOV DS 80000H MOV ES, DS MOV SI, 0 MOV DI, 0 MOV CX, 256 LOOP_CHECK: MOV AL, [SI] CALL ENEN_PARITY MOV [DI], AL LOOP LOOP_CHECK HLT
汇编写的我想吐😢