汇编语言程序设计,实现两个数组的合并.设数组a和b中均包含6个数据,要求合并后数据按照降序排列并显示。

供稿:hz-xin.com     日期:2025-01-13
汇编语言编程题,和数组有关

以前写了一半,因太长没写完。网上有现成的答案:

新手求教汇编问题!!!!!!!!!!!!!!在线等之。
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]); \/\/输出相同元素...