汇编语言程序设计,实现两个数组的合并.设数组a和b中均包含6个数据,要求合并后数据按照降序排列并显示。
以前写了一半,因太长没写完。网上有现成的答案:
新手求教汇编问题!!!!!!!!!!!!!!在线等之。
http://zhidao.baidu.com/question/148915126.html?si=1
做任务而已。
8086汇编代码:
a(array1)、b(array2)两数组均为降序排列,元素个数不限。
程序重点是如何使用字串的传送指令(lodsw、stosw、movsw),
对整数数据类型而言,比高级语言编制的程序简明太多了。
code segment
assume cs:code
org 100h
start: jmp bbb
array1: dw 89,67,56,45,34,23,12
n1 equ ($-array1)/2
num1 dw ($-array1)/2
array2: dw 167,156,80,78,60,50,40,30,20,10
n2 equ ($-array2)/2
num2 dw ($-array2)/2
array3 dw n1+n2 dup(?)
num3 dw ($-array3)/2
scx dw ?
sdx dw ?
ssi dw ?
sbx dw ?
bbb: push cs
pop ds
push cs
pop es
lea si,array1
lea di,array3
lea bx,array2
mov cx,num1
mov dx,num2
cli
@1:
cmp dx,0
je @3
lodsw
cmp ax,[bx]
jnc @2 ;无符号数,对有符号数改为 jg @2
mov ax,[bx]
stosw
inc bx
inc bx
dec dx
dec si
dec si
jmp @1
@2:
stosw
loop @1
@3: mov scx,cx
mov sdx,dx
mov ssi,si
mov sbx,bx
cmp word ptr scx,0
je @4
mov cx,scx
mov si,ssi
rep movsw
@4: cmp word ptr sdx,0
je @5
mov cx,sdx
mov si,sbx
rep movsw
@5:
lea si,array3
mov cx,num3
@6:
mov ax,[si]
call dispaxs
inc si
inc si
loop @6
mov ah,4ch
int 21h
;=========================================
DISPAXS PROC NEAR
PUSH AX
PUSH BX
PUSH CX
PUSH DX
PUSH SI
PUSH DI
PUSH BP
PUSH DS
PUSH ES
PUSHF
PUSH CS
POP DS
PUSH CS
POP ES
MOV CX,6
LEA DI,DISPAXSS
@DISPAXS:
MOV BYTE PTR [DI],32
INC DI
LOOP @DISPAXS
PUSH AX
MOV DL,32
MOV AH,2
INT 21H
POP AX
MOV BYTE PTR NZS,0
MOV BYTE PTR SIGNS,0
CMP AX,0
JGE @DISPAXS0
MOV BYTE PTR SIGNS,1
NEG AX
@DISPAXS0:
PUSH AX
LEA SI,DIVARRS
LEA DI,DISPAXSS
INC DI
MOV CX,5
@DISPAXS1:
POP AX
MOV DX,0
MOV BX,[SI]
DIV BX
PUSH DX
CMP AL,0
JNE @DISPAXS2
CMP BYTE PTR NZS,1
JE @DISPAXS2
CMP CX,1
JE @DISPAXS2
MOV DL,20H
JMP @DISPAXS3
@DISPAXS2:
ADD AL,30H
MOV DL,AL
MOV BYTE PTR NZS,1
@DISPAXS3:
MOV BYTE PTR[DI],DL
INC SI
INC SI
INC DI
LOOP @DISPAXS1
POP DX
CMP BYTE PTR SIGNS,1
JNE @DISPAXS6
LEA SI,DISPAXSS
ADD SI,5
@DISPAXS4:
CMP BYTE PTR [SI],32
JE @DISPAXS5
DEC SI
JMP @DISPAXS4
@DISPAXS5:
MOV BYTE PTR [SI],'-'
@DISPAXS6:
LEA DX,DISPAXSS
MOV AH,9
INT 21H
POPF
POP ES
POP DS
POP BP
POP DI
POP SI
POP DX
POP CX
POP BX
POP AX
RET
DIVARRS DW 10000,1000,100,10,1
NZS DB 0
SIGNS DB 0
DISPAXSS DB 32,32,32,32,32,32,'$'
DISPAXS ENDP
;==================================
code ends
end start
Java编程:两个int类型有序数组A和B,长度分别为m和n,合并成有序数组C...
\/\/两个有序的话,那么只用每次都从头部开始取值,然后插入到C数组里面\/\/所以时间复杂度为O(m+n)public void mergeArray(int[] a,int[] b,int[] c){ int m = 0; int n = 0; int x = 0; while(m<a.length&& n<b.length){ if(a[m]<= b[n]){ c[x++]=...
c语言编程 求两个超过200位的非负整数的和
代码如下:include <iostream> include <string> include <algorithm> using namespace std;string a, b, ans;int main() { cin >> a >> b;int aa = a.length();int bb = b.length();int ss = min(aa, bb);int ll = max(aa, bb);reverse(a.begin(), a.end());reverse(b....
(用C语言)编程计算数组各元素的平方和,要求如下
include <stdio.h> \/*函数声明*\/ void array_input(int array[],int n);int square_sum(int array[],int n);int main(int argc, char *argv[]){ int num[6];\/\/开辟含有6个元素的数组 int result=0;array_input(num,6);\/\/把开辟的数组首地址传给形参 result=square_sum(num,6);\/...
设计一个程序实现两个任意长的整数求和与差的运算
利用双向循环链表,设计一个实现任意长的整数进行加法运算的演示程序。要求输入和输出每四位一组,组间用逗号隔开。如:1,0000,0000,0000,0000。要用c语言编写...if(num2[i]==',') { num2[i]=0; if(q->next==p) { q->next=(node*)malloc(sizeof(node)); q->next->next=p; q->next->prev=q...
汇编语言程序设计题目,在线等答案!!!急!
;--- 14.假设变量A存放字节数据是39H, 变量B存放字节数据是36H,试编写程序实现将两个数组合后成为96 H,存放变量C中.;--- MOV AL, A ;取来A AND AL, 00001111B MOV CL, 4 SHR AL, CL ;左移4位.MOV CL, AL MOV AL, B ;取来B...
C++ 求两个整数集合(数组)的并集 求大神,前辈指点
个人觉得函数功能的安排有点缺乏灵活性。看看下面程序(有关函数重新设计了一下):include<iostream> using namespace std;\/\/输入数组元素 void input(int a[], int n){ for (int i = 0; i < n; i++)cin >> a[i];} \/\/判断key是否在数组x中 int found(int x[], int n,int key)...
...每个数组中各有10个不同的元素,输出在两个数组中都出现的元素。_百...
i=0;i<10;i++){ scanf("%d",&a1);a[i]=a1;} printf("请输入第2个数组的10个整数");printf("\\n");for(i=0;i<10;i++){ scanf("%d",&a2);b[i]=a2;} for(i=0;i<10;i++){ for(int j=0;j<10;j++){ if(a[i]==b[j])printf("%d ",a[i]);} } } ...
请编写一个程序,利用指针实现两个字符串的连接
解释方式下,计算机对高级语言书写的源程序一边解释一边执行,不能形成目标文件和执行文件。 编译方式下,首先通过一个对应于所用程序设计语言的编译程序对源程序进行处理,经过对源程序的词法分析,语法分析,语意分析,代码生成和代码优化等阶段将所处理的源程序转换为用二进制代码表示的目标程序; 然后通过连接程序处理将程序...
c语言编程:计算并输出给定数组(长度为9)中每相邻两个元素之平均值的平方...
include"stdio.h"include<math.h> main(){ int n[9]={1,2,3,4,5,6,7,8,9};int i;float sum=0;for(i=0;i<8;i++)sum+=sqare((n[i]+n[i+1])\/2.0);printf("sum=%d",sum);getchar();}
...输出在两个数组中都出现的元素。例如,a[5]={2,3,4,5,6},
首先要寻找在两个数组中都出现过的元素。然后输出。int *p1;int *p2;int len1,len2; \/\/分别表示两个数组的元素个数 p1=a; \/\/p1指向a数组 p2=b;\/\/p2指向b数组 for(j=0;j<len1;j++){ for(k=0;k<len2;k++){ if((p1[j])==(p2[k]))printf("%d",p2[k]); \/\/输出相同元素...