鱼C论坛

 找回密码
 立即注册
查看: 3852|回复: 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 | 显示全部楼层
嘿嘿……
push        ebp
mov         ebp,esp
sub         esp,44h
push        ebx
push        esi
push        edi
lea         edi,[ebp-44h]
mov         ecx,11h
mov         eax,0CCCCCCCCh
rep stos    dword ptr [edi]

mov         dword ptr [ebp-4],0

mov         eax,dword ptr [ebp-4]
lea         ecx,[eax+eax+18h]
mov         edx,dword ptr [ebp-4]
add         edx,20h
cmp         ecx,edx
 je          main+3Bh

mov         eax,dword ptr [ebp-4]
add         eax,1
mov         dword ptr [ebp-4],eax

jmp         main+1Fh 

mov         ecx,dword ptr [ebp-4]
push        ecx
push        offset string "%d" 
call        printf 
add         esp,8

 xor         eax,eax

pop         edi
pop         esi
pop         ebx
add         esp,44h
cmp         ebp,esp
call        __chkesp 
mov         esp,ebp
pop         ebp
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-11-18 22:53

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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