注册 登录
编程论坛 汇编论坛

[求助]汇编语言课程设计

xxx127 发布于 2006-12-27 09:38, 907 次点击

RT

以知有20个无符号数,存放在以A为首地址的内存单元中,试编制一个程序,完成以下功能:
求出所有奇数的和,偶数的和,能被3整除的数的个数,并依次存放在DDSVM、EVENSM和
COUNT单元中。

谢谢MM和GG帮忙说下

5 回复
#2
xxx1272006-12-27 10:13
江湖急救挖
#3
菜鸟上路2006-12-27 17:52

就是跳转指令

#4
xxx1272006-12-27 21:58

data segment
a dw 20 dup(?)
ddsvm dw ?
evensm dw ?
count db ?
data ends
stack segment
dw 40h dup(?)
stack ends
code segment
assume cs:code,ds:data,ss:stack
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
start:
mov ax,data
mov ds,ax
lea dx,a
mov ah,0ah
int 21h
lea si,a
mov cx,20
;push ax
;push dx
;push ds
again1:
mov bx,[si]
test bx,01h
;and bx,01h
jz l1
;mov dx,0
mov ddsvm,0
add ddsvm,bx
add si,2
loop again1
;mov ddsvm,dx
; mov ax,seg ddsvm
;mov ds,ax
;lea dx,ddsvm
mov ah,02h
int 21h
jmp bch
l1:
push dx
mov dx,0
add dx,bx
inc si
loop again1
mov evensm,dx
pop dx
mov ax,seg evensm
mov ds,ax
lea dx,evensm
mov ah ,09h
int 21h
jmp bch
call bg
mov ah,4ch
int 21h
bg proc near
push ax
push bx
push dx
push si
push cx
again2:
mov al,0
mov cx,20
mov ax,a
mov bl,3
div bl
cmp ah,0
je l2
jmp bch
l2:
inc al
loop again2
mov count,al

pop ax
pop bx
pop dx
pop si
pop cx
mov ah,9
mov bh,[count]
mov bl,7
mov cx,1
int 10h
bch:
mov ah,4ch
int 21h
ret
bg endp
code ends
end start

这个是我自己弄 的好象有好多错误 ,BB帮忙给改改

#5
菜鸟上路2006-12-29 20:22

思路应该没错,关键是细节,自己仔细看看

#6
lefttime2006-12-30 19:28
你的题意有点儿让人担心,首先你说有20个无符数,但却没说明是字节还是节
就先当做字节来看,我来做个吧
DSEG SEGMENT
A DB 20 DUP(?)
DDSVM DW 0
EVENSM DW 0
COUT DB 20 ;习惯这样做,先假设全部是,最后逐个减吧
DSEG ENDS
CSEG SEGMENT
ASSUME CS:CSEG,DS:DSEG
MAIN: MOV AX,DSEG
MOV DS,AX
MOV SI,0 ;这里用了基址变址,可以不用
MOV CL,3 ;除数
LEA BX,A
NEXT: MOV AL,[BX+SI]
TEST AL,1 ;奇偶数校验,估计没人不会啦
JNZ EVENT ;如果是负数,转移
ADD DDSVM,AX ;直接加到存储器中
JMP LOP
EVENT: ADD EVENSM,AX
LOP: MOV AH,0 ;高位清零,开始校验奇偶
DIV CL
CMP AH,0
JZ DONE ;余数为0则能被整除,不减个数
DEC COUT ;不为零减1
DONE: INC SI
CMP SI,20
JNZ NEXT
MOV AX,4C00H
INT 21H
CSEG ENDS
END MAIN
1