鱼C论坛

 找回密码
 立即注册
查看: 2545|回复: 6

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

[复制链接]
发表于 2014-5-4 18:25:04 From FishC Mobile | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
在一个长度为10的数组中,显示出当前数组中的元素,并显示出最大和最小的那个数,再去掉最大最小数,显示当前数组中元素,再求当前所有元素的平均值~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2014-5-4 18:51:28 | 显示全部楼层
额~忘了说~是8086汇编~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-4 20:17:57 | 显示全部楼层
菜鸟飘过啊,菜鸟飘过~~~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-4 20:33:58 | 显示全部楼层
这个简单,用ja之类的来实现,然后要注意是否会溢出之类的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2014-5-4 20:43:40 | 显示全部楼层

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

mov ax,0    ;ax存放最大数

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


s :  cmp ax,[bx+2] ; 拿当前最大数 减去 下一个数

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

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

s2: inc bx
      inc bx

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

;球最小数 就和上面相反就行了,你可以写在一个循环里面
; 球平均值也好办,就全部加起来,反正最大数和最小数 已经被去掉了,然后除以8 就得到平均数了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-6 17:46:39 | 显示全部楼层
xiaosawanjava 发表于 2014-5-4 20:43
mov cx,9     ;10个数, 只要比较 10-1次就行了
mov bx,0    ; 这个0 代表数组的第一元素的偏移地址

我写好啦~~不过编译时候有个错~~~不知道怎么改,还有显示数组里的元素不知道怎么弄~....能再帮我看一下吗???谢啦!程序我贴在下面~
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2014-5-6 17:47:52 | 显示全部楼层
assume cs:code ds:data
data segment
     ARRAY dw  39,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,[bx]
    inc bx
    inc bx
    loop s
    mov bl,10     ;               
    div bl                    ;DIV BL;商在AL中,余数在AH中
    mov [average],ax
      
     
     
     mov bx,ARRAY            ;进行第一次比较,找出最小值,并且去掉
     
      mov ax,0     ;用AX存放最小值
     
      mov ax,[bx]   ;      假设第一个数最小
     
      mov cx,10
    MIN:  cmp ax,[bx+2]
     
     jb min1
     
     mov ax,[bx+2]
    MIN1: inc bx
     
     inc bx
     
     loop MIN
     
      mov [MIN],ax          ;把最小值保存起来
      mov [bx],0  ;去掉最小值   
      
      
                                          //显示出最小值
     

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

   
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-18 03:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表