汇编高手进,新手请教,在线等待~~~~~

来源:百度知道 编辑:UC知道 时间:2024/04/28 00:30:24
题目:已定义了两个整数变量A和B,试用汇编语言编写程序完成下列功能:
(1)若两个数中有一个是奇数,则将奇数存入A中,偶数存入B中;
(2)若两个数均为奇数,则将两数均加1后存回原变量;
(3)若两个数均为偶数,则两个变量均不改变。
自己编写的代码如下:
data segment
A dw ?
B dw ?
data ends
code segment
assume cs:code,ds:date
start:
mov ax,data
mov ds,ax
mov cl,00B
mov ah,01h
int 21h
mov A,ax
mov ah,01h
int 21h
mov B,ax
mov ax,A
div 2
cmp dx,0
jnz next
B_check:
mov ax,B
div 2
cmp dx,0
jz exit
add cl,10B
cmp cl,11B
jz process
cmp cl,00B
jz exit
cmp cl,10B
jz change
next:
add cl,01B
jmp B_check
process:
inc B
inc A
jmp exit
change:
mov ax,A
mov da,B
mov A,dx
mov B,ax
e

有几个错误:
1、div 2 除法指令,操作数必须放在寄存器或者存储器,不能是立即数。
2、
change:
mov ax,A
mov da,B ;这里可能是你笔误,目的操作数应该是dx
mov A,dx
mov B,ax

3、mov ax,4ch //ax改为ah
int 21h
4、调用1号dos功能的时候读取的都是8位的字节数据,你都是用16位的寄存器,定义的变量都是16位数据,因此建议你全部改为8位的数据,再看看。我把程序修改如下:
data segment
A db ?
B db ?
data ends
code segment
assume cs:code,ds:date
start:
mov ax,data
mov ds,ax
mov cl,00B
mov ah,01h
int 21h
mov A,al
mov ah,01h
int 21h
mov B,al
mov al,A
xor ah,ah
mov bh,2
div bh
cmp ah,0
jnz next
B_check:
mov al,B
xor ah,ah
mov bh,2
div bh
cmp ah,0
jz exit
add cl,10B
cmp cl,11B
jz process
cmp cl,00B
jz exit
cmp cl,10B
jz change
next:
add cl,01B
jmp B_check
process:
inc B
inc A
jmp exit
change:
mov al,A
mov dl,