602968956 发表于 2014-5-4 18:25:04

一道汇编题,没有一点思路。求高手给讲解一下~

在一个长度为10的数组中,显示出当前数组中的元素,并显示出最大和最小的那个数,再去掉最大最小数,显示当前数组中元素,再求当前所有元素的平均值~~

602968956 发表于 2014-5-4 18:51:28

额~忘了说~是8086汇编~

传说。 发表于 2014-5-4 20:17:57

菜鸟飘过啊,菜鸟飘过~~~

cuibaowenown2 发表于 2014-5-4 20:33:58

这个简单,用ja之类的来实现,然后要注意是否会溢出之类的

xiaosawanjava 发表于 2014-5-4 20:43:40

602968956 发表于 2014-5-4 18:51 static/image/common/back.gif
额~忘了说~是8086汇编~

mov cx,9   ;10个数, 只要比较 10-1次就行了
mov bx,0    ; 这个0 代表数组的第一元素的偏移地址

mov ax,0    ;ax存放最大数

mov ax,    ;假设第一个数是最大数


s :cmp ax, ; 拿当前最大数 减去 下一个数

      ja s2               ;如果当前最大数,大于下一个数,那么ax不变,直接跳到s2

      ;执行到这里就说明 ax要么就小于或等于 下一个数,就直接把下一个数,放到ax里面
      ;此时ax又变成了最大数, 就算他是等于的话,交换一下也没事.
      mov ax,

s2: inc bx
      inc bx

loop s
;上面的循环执行完了,就找出最大的数了,存放在ax中
push ax         ;然后我们保存ax的值,其实也可以直接显示了,直接写到显存 b800就是显存的段地址
mov ,0      在将 源 最大数 置0,因为要求 要去掉

;球最小数 就和上面相反就行了,你可以写在一个循环里面
; 球平均值也好办,就全部加起来,反正最大数和最小数 已经被去掉了,然后除以8 就得到平均数了

602968956 发表于 2014-5-6 17:46:39

xiaosawanjava 发表于 2014-5-4 20:43 static/image/common/back.gif
mov cx,9   ;10个数, 只要比较 10-1次就行了
mov bx,0    ; 这个0 代表数组的第一元素的偏移地址



我写好啦~~不过编译时候有个错~~~不知道怎么改,还有显示数组里的元素不知道怎么弄~....能再帮我看一下吗???谢啦!程序我贴在下面~

602968956 发表于 2014-5-6 17:47:52

assume cs:code ds:data
data segment
   ARRAY dw39,52,61,29,38,71,21,56,88,99
   average   dw   ?
   max    dw       ?
   min   dw      ?
   average2    dw   ?
    data ends
code segment
    start:                  
                              //显示当前数组元素
    mov ax,0 ;
    mov bx,ARRAY
    mov cx,10                      ;计算未除去最大最小值时候的平均值
    s:
    add ax,
    inc bx
    inc bx
    loop s
    mov bl,10   ;               
    div bl                  ;DIV BL;商在AL中,余数在AH中
    mov ,ax
      
   
   
   mov bx,ARRAY            ;进行第一次比较,找出最小值,并且去掉
   
      mov ax,0   ;用AX存放最小值
   
      mov ax,   ;      假设第一个数最小
   
      mov cx,10
    MIN:cmp ax,
   
   jb min1
   
   mov ax,
    MIN1: inc bx
   
   inc bx
   
   loop MIN
   
      mov ,ax          ;把最小值保存起来
      mov ,0;去掉最小值   
      
      
                                          //显示出最小值
   

    mov bx,ARRAY   ; 进行第二次比较找出最大值
   
    mov ax,0                     ;用AX存放最大数
   
    mov ax,          ;假设第一个数是最大数
   
    mov cx,10                   ;设置循环次数
   
    MAX: cmp ax,
   
    ja MAX1               ;如果当前最大数,大于下一个数,那么ax不变,直接跳到s2      
   
   mov ax,
   
   MAX1:
      
      inc bx
   
   inc bx
      
      loop MAX
   
      mov ,ax                ;把AX保存起来,也可以直接显示
   
      mov ,0            ;去掉最大值,也就是把最大值置零   
   
      
      
          //显示出最大值
   
   
   
    mov ax,0 ;
    mov bx,ARRAY
    mov cx,10                      //计算除去最大最小值时候的平均值
    average:
    add ax,
    inc bx
    inc bx
    loop average
    mov bl,8   ;               
    div bl                  ;DIV BL;商在AL中,余数在AH中
    mov ,ax
                     
                     
                     
                        //显示除去最大最小之后的平均值
   

   
页: [1]
查看完整版本: 一道汇编题,没有一点思路。求高手给讲解一下~