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

[紧急求助]如何实现一个二维数组的输入输出?

写在人生边上 发布于 2007-11-09 09:36, 9675 次点击
如何实现一个二维数组的输入输出?这个问题已经困扰了我很久。


比如,要输出以下矩阵:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25

希望各位高手帮帮忙,我在此先谢过了!
11 回复
#2
写在人生边上2007-11-09 09:37
要用汇编语言写哟!
#3
爱以走远2007-11-09 11:07
Array db dup (5)
db dup (5)
db dup (5)
db dup (5)
db dup (5)


可以象上面那样定义一个缓冲区, 放数组, 在用中断输入输出 ,21H里的0xaH中断进行输入,输出用0x9H,
大概是这样的.
#4
写在人生边上2007-11-09 11:18

可不可以写点程序作为例子我看看呢?

我很菜的!

#5
写在人生边上2007-11-09 11:25
怎么从键盘输入数据存入数组中,再输出呢?
#6
zhoulikelvjj2007-11-10 14:36

data segment
array byte 25 dup (?)
count equ $-array
data ends
code segment 'code'
assume ds:data,cs:code

start:
mov ax,data
mov ds,ax

mov si,-1
mov cx,count

INP:inc si
mov ah,1
int 21h
mov array[si],al
cmp al,0dh
loopnz INP

cmp array[si],0dh
jnz A1
mov array[si],0

A1:mov cx,count
mov si,0
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
int 21h

OUTP:mov dl,array[si]
or dl,30h
mov ah,2
int 21h
inc si
mov ax,si
mov bl,5
div bl
cmp ah,0
jnz A2
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
int 21h
A2:loop OUTP

mov ah,4ch
int 21h

code ends
end start


#7
写在人生边上2007-11-10 20:30
你的程序好像不能实现:
1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19 20
21 22 23 24 25
输入1到25个数都不可以。

不过还是谢谢你!
#8
zhoulikelvjj2007-11-10 21:36

data segment
array word 25 dup (?)
count equ 25
outnum byte 5 dup (?)
data ends
code segment 'code'
assume ds:data,cs:code

start:
mov ax,data
mov ds,ax

mov si,-2
mov cx,count

INP:inc si
inc si
call inputnum
loop INP

mov cx,count
mov si,0
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
int 21h

OUTP:call outputnum
mov dl,20h
mov ah,2
int 21h
inc si
inc si
mov ax,si
mov bl,10
div bl
cmp ah,0
jnz A2
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
int 21h
A2:loop OUTP

mov ah,4ch
int 21h

inputnum proc ;输入一个数的函数,以空格结束
push ax
push bx
push dx
push cx
AGN1:mov ah,1
int 21h
cmp al,' '
jz RET1
sub al,30h
mov ah,0
xchg bx,ax
mov cl,10
mul cl
xchg bx,ax
add bx,ax
jmp AGN1
RET1:mov array[si],bx
pop cx
pop dx
pop bx
pop ax
ret
inputnum endp

outputnum proc ;输出函数
push ax
push bx
push cx
push dx
push di
mov ax,array[si]
mov cx,5
mov di,0
AGN2:mov bl,10
div bl
mov dl,ah
or dl,30h
mov outnum[di],dl
inc di
mov ah,0
loop AGN2
mov cx,5
OUT1:dec di
mov dl,outnum[di]
mov ah,2
int 21h
loop OUT1
pop di
pop dx
pop cx
pop bx
pop ax
ret
outputnum endp

code ends
end start

现在可以接受0-65535的数了。但是输出时不足5位的地方会补0。。。。

#9
写在人生边上2007-11-11 00:59


这个程序怎样从键盘输入1到25个数据呢?数据间要空格吗?

运行时为什么一回车光标就回到了起始位置呢?还是不能达到目的呀!
#10
zhoulikelvjj2007-11-11 13:42

输入都以空格结束,不加空格可以一直输入。但会溢出!
连续输入25个数后第一个输入循环才会结束。如果中间加回车的话我也不知道啥结果。没试过。呵呵
输入1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
25后加一个空格

#11
zhoulikelvjj2007-11-11 14:05

改进如下:
数据段定义部分,增加2个定义:
prompt byte "input a number:",'$' ;提示输入语句
bz byte ? ;标志变量,如果输入的是回车,通过这个标志变量可以直接跳出输入循环
输入循环INP,循环体内容改为:
INP:inc si
inc si
lea dx,prompt ;提示输入一个数
mov ah,9
int 21h
call inputnum
mov dl,0dh
mov ah,2
int 21h
mov dl,0ah
int 21h
cmp bz,0dh ;判断标志变量是不是回车,如果是,跳出循环。不是,继续循环
loopnz INP
输入函数inputnum,改为:
inputnum proc ;输入一个数的函数,以空格结束
push ax
push bx
push dx
push cx
AGN1:mov ah,1
int 21h
cmp al,' '
jz RET1
cmp al,30h ;如果数小于0,退出此次输入,回车符是0dh,小于30h
jb RET1
cmp al,39h ;如果数大于9,退出此次输入
ja RET1
sub al,30h
mov ah,0
xchg bx,ax
mov cl,10
mul cl
xchg bx,ax
add bx,ax
jmp AGN1
RET1:mov array[si],bx
mov bz,al
pop cx
pop dx
pop bx
pop ax
ret
inputnum endp
如果输入的数不是0-9,会提示你输入下一个数。每输入一个数请按空格结束,如果输入的是回车,直接跳出循环!

#12
huxiaoyuan2008-11-14 21:13
aaa
package Database;

public class ShuZu {
    public static void main(String[] args) {
        int num[][]=new int[5][5];
        for (int i = 0; i <5; i++) {
            for (int j = 0; j <5; j++) {
                switch(i){
                case 0:
                    num[i][j]=j+1;
                    break;
                case 1:
                    num[i][j]=j+6;
                    break;
                case 2:
                    num[i][j]=j+11;
                    break;
                case 3:
                    num[i][j]=j+16;
                    break;
                case 4:
                    num[i][j]=j+21;
                    break;
                }
                System.out.print(num[i][j]+" ");
                
            }
            System.out.println();
        }
    }
}
1