鱼C论坛

 找回密码
 立即注册
查看: 3453|回复: 10

两道作业题,有兴趣的朋友帮忙看下!急急急!!

[复制链接]
发表于 2011-6-16 19:17:31 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 Cherish♀ang 于 2011-6-18 18:32 编辑

作业一:
小明今年12岁,小明爸爸今年32岁,试用汇编语言编写程序求多少年后小明爸爸是小明岁数的两倍。
作业二:
用一百块钱买一百只鸡,已知公鸡五块钱一只,母鸡三块钱一只,小鸡一块钱三只。试用汇编语言编写程序求所以可行的买法。


把自己编的第二题的代码发上来了,但我不知道错在哪些地方,各位朋友帮忙看下!!

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-16 22:17:30 | 显示全部楼层
呃,不难啊,自己先试着做下呗,哪儿不会,把代码发上来,大家可以帮你,直接求答案有啥意义么
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-16 22:27:29 | 显示全部楼层
本帖最后由 king嗜血法师 于 2011-6-16 22:37 编辑

assume cs:exe,ds:data

data segment

db 12
db 32
data ends

exe segment

go: mov ax,data
    mov ds,ax
    xor di,di
    xor bx,bx
    mov dl,ds:[bx]
s: mov al,ds:[bx+1]
    xor ah,ah
    div dl                 
    inc dl             ;按循环每次小明的年龄加1
    xor ch,ch
    mov cl,ah
    add cx,1        ;这里开始我也搞错了,后来debug才想起来loop跳转是先cx减1,在判断cx是不是为0
    loop s
   
    sub dl,1            ;这时候的dl 是求出的16+1,所以这里要减去1
    mov al,ds:[bx]
    sub dl,al            ;16减去小明的初始年龄 dl 的值就16-12获得的值,也就是你要的
   
    mov ax,4c00H
    int 21H
exe ends
end go
第一题做出来了,不过这个只能求到倍数就结束,比如:被除数是60,除数是11,那就求到除数是12就结束了,因为没余数。
第二题那“所以”应该是“所有”吧?不过我现在学的还回答不上来:(
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-16 22:35:38 | 显示全部楼层
用了几分钟做了一题,结果会输出到屏幕中间
楼主研究下,自己啃下后一题吧,如果有不会,上来问大家

assume cs:code

code segment
start: mov al,12
        mov bl,32
        mov cx,0200h //cl计算年数,ch做为输出时字体颜色
s:      inc al   //al,bl每循环一次自己加1岁
        inc bl
        inc cx
        mov ah,al  //把al值给ah,ah*2与bl比较,相等就输出,不相等继续循环
        add ah,ah
        cmp ah,bl
        jnz s
  
        mov ax,0b800h //用显卡缓冲区输出cx中的结果
        mov es,ax
        mov bx,1680  //屏幕中间显示
        add cx,30h
        mov es:[bx],cx
        mov ax,4c00h
        int 21h
code ends
end start

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-16 22:36:50 | 显示全部楼层
唔,忘了说,如果不需要输出结果,只用上半部分就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-16 22:46:23 | 显示全部楼层
果然代码少效果比我的好多了,这样不是两倍会继续循环:dizzy:
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-17 00:35:32 | 显示全部楼层
嘿嘿……

  1. push        ebp
  2. mov         ebp,esp
  3. sub         esp,44h
  4. push        ebx
  5. push        esi
  6. push        edi
  7. lea         edi,[ebp-44h]
  8. mov         ecx,11h
  9. mov         eax,0CCCCCCCCh
  10. rep stos    dword ptr [edi]

  11. mov         dword ptr [ebp-4],0

  12. mov         eax,dword ptr [ebp-4]
  13. lea         ecx,[eax+eax+18h]
  14. mov         edx,dword ptr [ebp-4]
  15. add         edx,20h
  16. cmp         ecx,edx
  17. je          main+3Bh

  18. mov         eax,dword ptr [ebp-4]
  19. add         eax,1
  20. mov         dword ptr [ebp-4],eax

  21. jmp         main+1Fh

  22. mov         ecx,dword ptr [ebp-4]
  23. push        ecx
  24. push        offset string "%d"
  25. call        printf
  26. add         esp,8

  27. xor         eax,eax

  28. pop         edi
  29. pop         esi
  30. pop         ebx
  31. add         esp,44h
  32. cmp         ebp,esp
  33. call        __chkesp
  34. mov         esp,ebp
  35. pop         ebp
  36. ret
复制代码





想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
发表于 2011-6-17 02:16:02 | 显示全部楼层
老大你发的代码,我们初学者都看不明白。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-17 08:56:13 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-17 09:00:43 | 显示全部楼层

老大发的代码,果然与众不同!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
 楼主| 发表于 2011-6-17 09:25:52 | 显示全部楼层
本帖最后由 Cherish♀ang 于 2011-6-18 18:44 编辑

下面是我自己编的第二题的代码:
datas segment
chick    db 0          ;暂存小鸡
hen      db 0          ;暂存母鸡
cock    db 0          ;暂存公鸡

obuff db "chick 00  hen 00  cock 00",0ah,0dh,'$'    ;用于输出各种鸡的个数

datas ends

stacks segment
    db 32 dup(0)
stacks ends

code segment
   
start:
        assume cs:codes,ds:datas,ss:stacks
        mov ax,datas
        mov ds,ax
        mov ax,stacks
        mov ss,ax
        
        mov di,offset obuff                ;si,di初始化
        xor si,si

        mov cx,99                             ;设置循环次数
outside:
        inc byte ptr 1[si]               
        mov byte ptr 2[si],-1        
        
        mov ax,100                           ;设置内循环的循环次数
        sub ax,cx
        push cx
        mov cx,ax
inside:
        inc byte ptr 2[si]
        
        mov bx,0e08h                        ;计算公鸡*14+母鸡*8,存放在al中
        mov al,byte ptr 1[si]        
        mul bl
        mov dl,al
        mov al,byte ptr 2[si]
        mul bh
        add al,dl                                
        
        cmp al,100
        jz ok
        loop inside
        jmp outside2
        
ok:                                                        
;输出这种组合方式
        mov al,100                                ;求小鸡数
        sub al,byte ptr 1[si]
        sub al,byte ptr 2[si]
        mov byte ptr [si],al
        
        mov bl,10
        
        xor ah,ah                                   ;将小鸡数目转化成ascii码储存在obuff中的相应位置        
        div bl
        add ax,3030h
        mov word ptr 6[di],ax
        
        xor ah,ah                                  ;将母鸡数目转化成ascii码储存在obuff中的相应位置
        mov al,byte ptr 1[si]
        div bl
        add ax,3030h
        mov word ptr 14[di],ax
        
        xor ah,ah                                   ;将公鸡数目转化成ascii码储存在obuff中的相应位置
        mov al,byte ptr 2[di]
        div bl
        add ax,3030h
        mov word ptr 23[di],ax
        
        mov dx,di
        mov ah,9
        int 21h
        
outside2:        
        pop cx
        loop outside        
        
        mov ax,4c00h
        int 21h
code ends
    end start


可是它运行后的结果是错误的,请各位高手帮忙看下代码。
谢谢~
下面是运行结果截图:
结果.png
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

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

GMT+8, 2024-3-28 20:10

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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