两道作业题,有兴趣的朋友帮忙看下!急急急!!
本帖最后由 Cherish♀ang 于 2011-6-18 18:32 编辑作业一:
小明今年12岁,小明爸爸今年32岁,试用汇编语言编写程序求多少年后小明爸爸是小明岁数的两倍。
作业二:
用一百块钱买一百只鸡,已知公鸡五块钱一只,母鸡三块钱一只,小鸡一块钱三只。试用汇编语言编写程序求所以可行的买法。
把自己编的第二题的代码发上来了,但我不知道错在哪些地方,各位朋友帮忙看下!!
呃,不难啊,自己先试着做下呗,哪儿不会,把代码发上来,大家可以帮你,直接求答案有啥意义么 本帖最后由 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:
s: mov al,ds:
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:
sub dl,al ;16减去小明的初始年龄 dl 的值就16-12获得的值,也就是你要的
mov ax,4c00H
int 21H
exe ends
end go
第一题做出来了,不过这个只能求到倍数就结束,比如:被除数是60,除数是11,那就求到除数是12就结束了,因为没余数。
第二题那“所以”应该是“所有”吧?不过我现在学的还回答不上来:( 用了几分钟做了一题,结果会输出到屏幕中间
楼主研究下,自己啃下后一题吧,如果有不会,上来问大家
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:,cx
mov ax,4c00h
int 21h
code ends
end start
唔,忘了说,如果不需要输出结果,只用上半部分就可以了 果然代码少效果比我的好多了,这样不是两倍会继续循环:dizzy: 嘿嘿……
push ebp
mov ebp,esp
sub esp,44h
push ebx
push esi
push edi
lea edi,
mov ecx,11h
mov eax,0CCCCCCCCh
rep stos dword ptr
mov dword ptr ,0
mov eax,dword ptr
lea ecx,
mov edx,dword ptr
add edx,20h
cmp ecx,edx
je main+3Bh
mov eax,dword ptr
add eax,1
mov dword ptr ,eax
jmp main+1Fh
mov ecx,dword ptr
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
老大你发的代码,我们初学者都看不明白。。。 winddyj 发表于 2011-6-16 22:35 static/image/common/back.gif
用了几分钟做了一题,结果会输出到屏幕中间
楼主研究下,自己啃下后一题吧,如果有不会,上来问大家
:loveliness:谢谢~ 小甲鱼 发表于 2011-6-17 00:35 static/image/common/back.gif
嘿嘿……
老大发的代码,果然与众不同!
本帖最后由 Cherish♀ang 于 2011-6-18 18:44 编辑
下面是我自己编的第二题的代码:
datas segment
chick db 0 ;暂存小鸡
hen db 0 ;暂存母鸡
cock db 0 ;暂存公鸡
obuff db "chick 00hen 00cock 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
mov byte ptr 2,-1
mov ax,100 ;设置内循环的循环次数
sub ax,cx
push cx
mov cx,ax
inside:
inc byte ptr 2
mov bx,0e08h ;计算公鸡*14+母鸡*8,存放在al中
mov al,byte ptr 1
mul bl
mov dl,al
mov al,byte ptr 2
mul bh
add al,dl
cmp al,100
jz ok
loop inside
jmp outside2
ok:
;输出这种组合方式
mov al,100 ;求小鸡数
sub al,byte ptr 1
sub al,byte ptr 2
mov byte ptr ,al
mov bl,10
xor ah,ah ;将小鸡数目转化成ascii码储存在obuff中的相应位置
div bl
add ax,3030h
mov word ptr 6,ax
xor ah,ah ;将母鸡数目转化成ascii码储存在obuff中的相应位置
mov al,byte ptr 1
div bl
add ax,3030h
mov word ptr 14,ax
xor ah,ah ;将公鸡数目转化成ascii码储存在obuff中的相应位置
mov al,byte ptr 2
div bl
add ax,3030h
mov word ptr 23,ax
mov dx,di
mov ah,9
int 21h
outside2:
pop cx
loop outside
mov ax,4c00h
int 21h
code ends
end start
可是它运行后的结果是错误的,请各位高手帮忙看下代码。
谢谢~
下面是运行结果截图:
页:
[1]