汇编程序设计习题(3)

[!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

汇编写的我想吐😢

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值