设有两个16位整数变量A和B,试编写完成下述操作的程序。

设有两个16位整数变量A和B,试编写完成下述操作的程序。

(1)若有两个数中一个是奇数,则将奇数存入A中,偶数存入B中。
(2)若两个数均为奇数,则两数分别减1,并存回原变量中。
(3)若两数均为偶数,则两变量不变。
即只需要分成两大类判断即可,①A、B一奇一偶 ②A、B都是奇数或同是偶数;然后,同奇或同偶再进行细分,是同奇还是同偶

汇编思路:首先DATA段定义A、B变量。其次,A赋值给AX,B赋值给BX,使用AX、BX进行参与运算。AX和BX进行异或运算,结果存放到AX中,然后与0001H进行TEXT与运算,判断AX的最后结果,结果为1,则A、B一奇一偶,否则为A、B同奇或同偶。一奇一偶,XCHG交换两数;若同偶,调用4CH结束即可;若同奇,分别减一DEC,然后输出即可。

代码如下:

DATA	SEGMENT
A	DW	?
B	DW	?
DATA	ENDS
CODE	SEGMENT
		ASSUME	CS:CODE,DS:DATA
START:	MOV	AX,DATA
		MOV	DS,AX
LOP:	MOV	AX,A	;将变量A赋值给通用寄存器AX
		MOV	BX,B	;将变量B赋值给通用寄存器BX
		XOR	AX,BX	;异或运算是为了判断A、B是否为一奇一偶、同奇或同偶,若AX最后一位为1,则一奇一偶,否则A、B同奇或同偶
		TEXT AX,0001H;与运算,只需要判断最后一位是否为1,结果为1,则A、B一奇一偶,否则为A、B同奇或同偶
		JZ	NEXT	;若最后AX结果为0,即A、B同奇或同偶,跳转NEXT标签处 否则,A、B一奇一偶,执行下条指令
		TEXT BX,0001H;执行到此条指令,此时A、B一奇一偶已确定,只需要奇数存入A,偶数存入B即可 由于XOR AX,BX此时的AX已经不再存放原来A中内容,但是BX仍存放B的内容,需要判断BX是否为奇数 执行此命令与运算操作,结果若为0,表示BX为偶数,则A为奇数 反之结果为1,BX为奇数,A为偶数
		JZ	EXIT	;若BX为0,即AX为奇数,BX为偶数,跳转EXIT标签处 否则执行下条指令
		XCHG BX,A	;执行到此条指令前,此时AX为偶数,BX为奇数,即A存放偶数,B存放奇数,交换A和BX的数据,即A存放BX的奇数,BX存放A的偶数
		MOV	B,BX	;将BX存放A的偶数赋值给B,最终,A存放奇数,B存放偶数
		JMP	EXIT	;无条件跳转到EXIT标签处
NEXT:	TEXT BX,0001H;执行到此条指令前,已确定A、B同奇或同偶,由于XOR AX,BX此时的AX已经不再存放原来A中内容,但是BX仍存放B的内容,需要判断BX是否为奇数 执行此命令与运算操作,结果若为0,表示BX为偶数,则A也为偶数,即同偶,否则同奇
		JZ	EXIT	;若BX为0,即同偶,跳转EXIT标签处 否则执行下条指令
		DEC	B		;执行到此条指令前,此时A、B同奇,由题目要求需要两数分别减一,并存回原变量中 B减一
		DEC	A		;A减一
EXIT:	MOV	AH,4CH	;执行到此条指令前,表示AX为奇数,BX为偶数,即A存放奇数,B存放偶数,由题目要求可得,直接输出即可,调用4CH号功能,返回DOS操作系统指令
		INT 21H		;终止当前程序的运行,并返回DOS系统
CODE	ENDS
		END START
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beyond谚语

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值