已定义了两个整数变量A和B编写汇编程序asm (1) 若两个数中有一个是奇数,则将奇数存入A中,偶数存 入B中; (2) 若两个数均为奇数,则将两数均加1后存回原变量。

大家好啊,我是xin麒,公众号是善于思考的编程麒,今天又来分享一道汇编题目:

问题描述:

已定义了两个整数变量A和B,试编写程序完成下列功能:
(1) 若两个数中有一个是奇数,则将奇数存入A中,偶数存
入B中;
(2) 若两个数均为奇数,则将两数均加1后存回原变量。

题解(asm代码):

注释如有错误望指正哈

;5.2  已定义了两个整数变量A和B,试编写程序完成下列功能:
;    (1) 若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中;     
;    (2) 若两个数均为奇数,则将两数均加1后存回原变量。

;--------------思路分析--------------》
;先明确情况:①奇偶②偶奇③偶偶④奇奇
;分析思路:
;两个相加,如果值为奇数,则必定有一个为奇数,另一个为偶数
;          如果为偶数,则1、两个均为奇数 
;                       2、两个为偶数--->不做任何处理
;设计程序:CLC将CF请0,将和加到AX中,带进位右移1位,
;如果为偶数,先将a mov到 ax,判断是奇数还是偶数,如果是奇数,那么实现分别两者加1
                                            ;如果是偶数,跳到结束战斗
;如果和为奇数,
;           则将A   mov到ax里面判断是否为奇数,如果是,那么跳到结束战斗
;                               如果为偶数,则将A值传到ax,将b值赋给a值,ax值mov到a,跳到结束战斗
;《-------------------------------------

DATA SEGMENT

;<-----①------>
    ;NUMBER1 DB 43
    ;NUMBER2 DB 62
;<-----②------>
    ;NUMBER1 DB 42
    ;NUMBER2 DB 63
;<-----③------>
    NUMBER1 DB 42
    NUMBER2 DB 62
;<-----④------>
    ;NUMBER1 DB 4
    ;NUMBER2 DB 63

DATA ENDS

CODE SEGMENT
    ASSUME CS:CODE,DS:DATA
START: MOV AX,DATA                     ;ASSUME伪指令,说明段与段寄存器之间的对应关系
	MOV DS,AX

    MOV AL,NUMBER1
    ADD AL,NUMBER2

    CLC
    RCR AL,1

    JAE IS_EVEN;如果CF=0说明和为偶数,直接跳进IS_EVEN
    ;为奇数,那么就往下走:
    MOV AL,NUMBER1
    
    CLC
    RCR AL,1

    JC FINNAL;jc:如果CF=1那么跳转<----①奇偶-------->
;如果CF=0,说明为偶数,则交换NUMBER1 和 NUMBER2:-------②偶奇---------->
    MOV AL,NUMBER2
    MOV BL,NUMBER2
    MOV NUMBER1,BL;不可以使用XCHG NUMBER2,NUMBER1,否则会报operand combination illegal的双操作数指令中两个操作数组合出错。
    MOV NUMBER2,AL
    
    CLC
    JAE FINNAL
    ;<-----------------
;-----------------③偶偶----------------->
IS_EVEN:
    MOV AL,NUMBER1

    CLC
    RCR AL,1

    JAE FINNAL;如果都是偶数,直接结束,如果都是奇数那么往下走
;----------------④奇奇--------------->
;第一个数加1
    MOV AL,NUMBER1
    ADD AL,1
    MOV NUMBER1,AL
;第二个数加1
    MOV AL,NUMBER1
    ADD AL,1
    MOV NUMBER1,AL 
    ;<----------------------------------
;<-------------------------------------------
FINNAL:	MOV AH,4CH			;结束战斗
	INT 21H
CODE ENDS
	END START

原创不易,如果觉得有帮助的话麻烦点个赞呗

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值