求一个程序 汇编语言在8086 输入两组数据,比较相同的数据然后把相同的数据输出到另一个组中,急!

求一个程序 汇编语言在8086 输入两组数据,比较相同的数据然后把相同的数据输出到另一个组中,急!,第1张

;求一个程序 汇编语言

;在8086 输入两组数据,比较相同的数据然后把相同的数据输出到另一个组中,急!

;用MASM 50编译通过

;数据段中定义的 'HHHHHHHH' 是调试程序时用的,可删除。。。

;输入数组数据时,各数字间用空格做分隔符,输入完毕用回车。。。

data segment

M1 DB 0DH,0AH,'Input DATA1: $'

M2 DB 0DH,0AH,'Input DATA2: $'

M3 DB 0DH,0AH,'The same are: $'

BUF DW 0   ;每次输入的数暂存

N   DB 0 ;每次输入数组中数的个数暂存

db 'HHHHHHHH'

BUF1 DW 10 DUP(0) ;输入的数组1(共10个数据)

db 'HHHHHHHH'

BUF2 DW 10 DUP(0) ;输入的数组2(共10个数据)

db 'HHHHHHHH'

BUF3 DW 10 DUP(0) ;两个数组相同的数据(最多10个数据)

db 'HHHHHHHH'

N1 DB 0 ;数组1中实际输入的数据个数

N2 DB 0 ;数组2中实际输入的数据个数

N3 DB 0 ;两个数组中相同的数据个数

B  DB 0 ;空格标志。b=0 表示数据未保存,b=1表示数据已保存(避免重复存储)

data ends

code segment

assume cs:code, ds:data

main proc far

start:

push ds

xor ax,ax

push ax

mov ax,data

mov ds,ax

PUSH DS

POP ES

;-------------------------

mov AH,09

MOV DX,OFFSET M1

INT 21H

MOV si,OFFSET BUF1 ;输入数组1的数字,保存到BUF1

MOV AL,0

MOV N,AL

CALL INPUT

MOV AL,N

MOV N1,AL

mov AH,09

MOV DX,OFFSET M2

INT 21H

MOV si,OFFSET BUF2 ;输入数组2的数字,保存到BUF2

MOV AL,0

MOV N,AL

CALL INPUT

MOV AL,N

MOV N2,AL

MOV AH,9

MOV DX,OFFSET M3

INT 21H

XOR CX,CX ;以下查找相同的数字,保存到BUF3

MOV CL,N1

MOV BX,OFFSET BUF1

MOV SI,OFFSET BUF3

L2:

MOV AX,[BX]

PUSH CX

PUSH BX

XOR CX,CX

MOV CL,N2

MOV BX,OFFSET BUF2

;MOV SI,OFFSET BUF3

L3:

CMP AX,[BX]

JNE NO_3

MOV [SI],AX

ADD SI,2

INC N3

NO_3:

ADD BX,2

LOOP L3

POP BX

POP CX

ADD BX,2

LOOP L2

XOR CX,CX ;以下显示两个数值中相同的数字

MOV CL,N3

MOV BX,OFFSET BUF3

NEXT_D:

CALL OUT10

ADD BX,2

LOOP NEXT_D

mov ah,4ch

int 21h

MAIN ENDP

;==================

;=================== 输入子程序

input proc near

next_one:

MOV AX,0

MOV BUF,AX

IN_1:

MOV AH,08

INT 21H  ;输入在AL中

CMP AL,'0'

JB NO_09

CMP AL,'9'

JA NO_09

MOV AH,2 ;输入的是0-9,显示之

MOV DL,AL

INT 21H

SUB AL,30H ;将输入在AL中的ASCII码转成数字

MOV AH,0

PUSH AX

MOV BX,BUF

MOV AX,10

MUL BX  ;BUF  10  结果在DX:AX中 (DX=0)

POP BX

ADD AX,BX ;AX <== BUF  10 + 新输入的1位数字

MOV BUF,AX ;保存

mov AL,1

MOV B,AL ;做输入标志

JMP IN_1 ;输入该数字的下一位

NO_09:  ;输入的非0-9

CMP AL,' ' ;是空格符吗

JE SAVE_IT

CMP AL,0DH ;是回车符吗

JE YES_0D ;是转

JMP IN_1 ;不是则输入该数字的下一位

SAVE_IT:

;判断上一个字符是否也是空格,避免重复储存

mov al,b

cmp al,0

jz re_save ;b=0 表示该数据已储存过,直接返回输入

PUSH AX ;显示一个空格

PUSH DX

MOV AH,2

MOV DL,' '

INT 21H

POP DX

POP AX

MOV AX,BUF

MOV [SI],AX

INC SI

INC SI

INC N

xor al,al

mov b,al ;做已存储标志

re_save:

jmp next_one

YES_0D:  ;是回车符

;判断上一个字符是否是空格,避免重复储存

mov al,b

cmp al,0

jz ret1  ;b=0 表示该数据已储存过,直接返回输入

;否则,保存该数据,并计数加1

MOV AX,BUF

MOV [SI],AX

INC N

ret1:

ret

input endp

;===================== 将10进制数输出

out10 proc near

push cx

push dx

push si

mov ax,[bx]

MOV CX,0

DIV_1:

MOV DX,0

MOV SI,10

DIV SI

ADD DL,30H

INC CX

PUSH DX

CMP AX,0

JNZ DIV_1

DISP_1:

MOV AH,2

POP DX

INT 21H

LOOP DISP_1

mov ah,2

mov dl,' '

int 21h

pop si

pop dx

pop cx

ret

out10  endp

;===========================

code ends

end start

就给个相同问题的答案,不同问题你自己动动脑筋吧!自己动脑动手,获得成果,更有意义!

说说算法的思路:

一、读取原始数据,存入数组。

1、把Text1里的内容,读入到数组a1。

2、把Text2里的内容,读入到数组a2。

二、用双重循环进行查找判断是否符合要求,符合要求的结果连接在一个字符串变量里LinStr。

三、将LinStr显示在Text3里。

参考代码如下:

Private Sub Command1_Click()

Dim a1() As String

Dim a2() As String

Dim a3() As String

Dim LinStr As String

Dim i As Integer

Dim j As Integer

Dim n As Integer

Dim a2s As Integer

Dim a2g As Integer

Dim a1b As Integer

Dim a1g As Integer

LinStr = Trim(Text1Text)

a1 = Split(LinStr, " ") '把Text1里的内容,读入到数组a1

LinStr = Trim(Text2Text)

a2 = Split(LinStr, " ") '把Text2里的内容,读入到数组a2

If Len(a2(0)) = 1 Then

'处理一位数字

LinStr = ""

For i = 0 To UBound(a1)

For j = 0 To UBound(a2)

'Text2的内容是否出现在Text1里

If InStr(a1(i), a2(j)) <> 0 Then

'判断是否重复出现过,如果没有重复,就连接到LinStr

If InStr(LinStr, a1(i)) = 0 Then

'连接找到的字符串,并在后面添加换行符号(vbCrLf)

LinStr = LinStr & a1(i) & vbCrLf

End If

End If

Next j

Next i

Else

'处理两位数字

LinStr = ""

For i = 0 To UBound(a1)

For j = 0 To UBound(a2)

'拆分出百位数、十位数和个位数

'请自己看以下Mod运算和\运算以及Cint()函数的功能

a1g = CInt(a1(i)) Mod 10

a1b = CInt(a1(i)) \ 100

a2g = CInt(a2(j)) Mod 10

a2s = CInt(a2(j)) \ 10

'Text2的内容是否出现在Text1里

If InStr(a1(i), a2(j)) <> 0 Or (a1g = a2s And a1b = a2g) Then

'判断是否重复出现过,如果没有重复,就连接到LinStr

If InStr(LinStr, a1(i)) = 0 Then

'连接找到的字符串,并在后面添加换行符号(vbCrLf)

LinStr = LinStr & a1(i) & vbCrLf

End If

End If

Next j

Next i

End If

'把LinStr内容显示在Text3

Text3Text = LinStr

End Sub

说明:

我的答案,是在Text3里,每行显示一个数字,若要在Text3里显示在一行里,数字间用空格分隔,你自己动动脑子吧!我的代码里"VBCrLf"是换行用的,你要不换行而用空格分隔,该怎么办呢?自己想想办法吧???

#include <stdioh>

#include <malloch>

int main(void)

{

int a,n,i,j,k;

scanf("%d",&n);

a=(int )malloc(sizeof(int)n);

for(i=0;i<n;++i)

{

scanf("%d",&a[i]);

}

for(i=0;i<n;++i)

{

for(j=i+1;j<n;++j)

{

if(a[j]==a[i])

{

for(n--,k=j;k<n;k++)

{

a[k]=a[k+1];

}

}

}

}

for(i=0;i<n;++i)

{

printf("%d ",a[i]);

}

free(a);

return 0;

}

以上就是关于求一个程序 汇编语言在8086 输入两组数据,比较相同的数据然后把相同的数据输出到另一个组中,急!全部的内容,包括:求一个程序 汇编语言在8086 输入两组数据,比较相同的数据然后把相同的数据输出到另一个组中,急!、vb数组问题 找包含相同数字的数组、编写程序输入n个整数,查找并删除重复的数字,打印结果。(c语言)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10160901.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存