;求一个程序 汇编语言
;在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语言)等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)