assume cs:CG
DG segment
db 256 dup (0) ;每行16字符,共16行,故16*16
DG ends
CG segment
start :mov si,DG
mov ds,si
xor si,si ;或者sub si,si也行,个人感觉效率比mov si,0快,而且少占了1字节。
mov dx,1
mov cx,16
s :push cx
mov cx,dx
xor bx,bx
mov ax,bx
s2 :mov ,bl
inc bx
loop s2
inc dx
add si,10h
pop cx
loop s
mov ax,4c00h
int 21h
CG ends
end start
手机临时思路,没验证哈。。。
我发现我违反规定了。。用到了栈。。。
assume cs:CG
DG segment
db 256 dup (0) ;每行16字符,共16行,故16*16
DG ends
CG segment
start :mov si,DG
mov ds,si
xor si,si ;或者sub si,si也行,个人感觉效率比mov si,0快,而且少占了1字节。
mov dx,1
mov cx,16
s :mov di,cx
mov cx,dx
xor bx,bx
mov ax,bx
s2 :mov ,bl
inc bx
loop s2
inc dx
add si,10h
mov cx,di
loop s
mov ax,4c00h
int 21h
CG ends
end start
我改造了一下。 敉沧 发表于 2012-7-27 22:31 static/image/common/back.gif
assume cs:CG
DG segment
嗯,很不错~{:1_1:} 敉沧 发表于 2012-7-27 22:31 static/image/common/back.gif
assume cs:CG
DG segment
mov ax,bx 这一步可以省了吧,省了后debug没有问题。貌似你这个写的是最简的了。{:5_106:} lukelqz 发表于 2012-7-28 12:26
mov ax,bx 这一步可以省了吧,省了后debug没有问题。貌似你这个写的是最简的了。
呃,是的,我忘记删掉了。之前用到了ax。。。后来改了一下忘记删了。。。 我把代码也发上来!
assume cs:code ;数字塔
data segment
db 256 dup (0)
data ends
code segment
start: mov ax,data
mov ds,ax
mov bx,255
mov di,1
mov dx,1
mov ax,15
mov cx,15
s0: mov si,cx
mov ax,cx
inc di
s: mov ,al
dec bx
dec al
loop s
sub bx,di
mov cx,si
loop s0
mov ax,4c00h
int 21h
code ends
end start
天长地久 发表于 2012-7-28 16:20 static/image/common/back.gif
我把代码也发上来!
assume cs:code ;数字塔
data segment
很棒,代码20行都没到 assume cs:code,ds:data
data segment
db 16 dup(0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15)
data ends
code segment
start:
mov ax,data
mov ds,ax
mov di,0
mov ax,0
mov cx,15
d: mov dx,cx
mov bx,0fh
s: movds:,al
dec bx
loop s
mov cx,dx
add di,10h
loop d
mov ax,4c00h
int 21h
code ends
end start
自测成功. 我有点投机取巧了 Pasca1 发表于 2012-7-29 10:53 static/image/common/back.gif
自测成功. 我有点投机取巧了
不错的,不管黑猫白猫,抓到老鼠的就是好猫! assume cs:code
data segment
db 256 dup(0) ;申请一段数据地址
data ends
code segment
dong: mov ax,data
mov ds,ax
mov bx,0
mov ax,0
s: ;第一层循环,考虑到不能用栈,我就没用loop循环。
call shu
add bx,16 ;每内循环结束后,偏移地址,指向下一行的首地址。
inc ax ;用于循环相当于 C语言
cmp ax,16 ;同上如果AX大于16则跳到程序结尾。
ja jieshu
jmp short s ;若AX不大于16.跳到S继续循环程序。
jieshu:
mov ax,4c00h
int 21h
shu: ;内循环
mov si,0 ;设置一个偏移用于输入数据列的偏移地址。
mov dl,0 ;设置一个字节数据,送给指定的内存地址。
mov cx,ax ;设置循环次数
inc cx ;加1,这里自己考虑一下 ~.~
s1:
mov ,dl ;依次循环存入数据。
inc si ;地址每次更新指向下一次要存入的地址空间。
inc dl ;下一个存入的数据。
loop s1
我的方法。
ret
code ends
end dong
再贴一个,第一个贴的虽然啰嗦了点,但是我觉得封进子程序是个好习惯。assume cs:code
data segment
db 256 dup(0) ;申请一段数据地址
data ends
code segment
dong: mov ax,data
mov ds,ax
mov bx,0
mov ax,1
mov cx,16
s:
mov di,cx
mov dl,0
mov si,0
mov cx,ax
s1:
mov ,dl
inc dl
inc si
loop s1
add bx,16
mov cx,di
inc ax
loop s
mov ax,4c00h
int 21h
code ends
end dong
assume cs:code,ds:data,es:table
data segment
db 256 dup (0)
data ends
table segment
db 00h,01h,02h,03h,04h,05h,06h,07h,08h,09h,0Ah,0Bh,0Ch,0Dh,0Eh,0Fh
table ends
code segment
start:
mov ax,data
mov ds,ax
mov ax,table
mov es,ax
mov ax,0
mov dx,1
mov cx,16
s0:mov bx,cx
mov si,0
mov cx,dx
s:mov al,es:
mov ,al
inc si
loop s
add dx,1
add bp,16
mov cx,bx
loop s0
mov ax,4c00h
int 21h
code ends
end start 本帖最后由 Pasca1 于 2012-7-30 23:06 编辑
离丶dong子 发表于 2012-7-29 22:14 http://bbs.fishc.com/static/image/common/back.gif
很超前.{:5_106:} 张国祥 发表于 2012-7-29 21:11 static/image/common/back.gif
不错的,不管黑猫白猫,抓到老鼠的就是好猫!
嗯当时 想过用db 256 dup(0) .. 不过方法一时没想出来
后来想的用00填充构建数字塔。 Pasca1 发表于 2012-7-30 23:01 static/image/common/back.gif
很超前.
{:5_109:}没事多出点新鲜题目,开拓一下思路{:5_109:} assume cs:codesg
codesg segment
start: mov ax,076ah
mov ds,ax
mov bx,0
mov cx,256
s1: mov word ptr ,0
inc bx
loop s1
mov bx,16
mov ax,0
mov cx,15
s2: mov al,16
sub al,cl
s3: mov si,ax
mov byte ptr ,al
dec al
cmp al,1
jnb s3
add bx,16
loop s2
mov ax,4c00h
int 21h
codesg ends
end start
哈哈·
··闲着没事打一个玩的···
继续加油····· 静雨纷纷 发表于 2012-7-31 01:30 static/image/common/back.gif
assume cs:codesg
codesg segment
start: mov ax,076ah
恩,不错,共同努力 离丶dong子 发表于 2012-7-29 22:36 static/image/common/back.gif
再贴一个,第一个贴的虽然啰嗦了点,但是我觉得封进子程序是个好习惯。
恩,利用call,ret的确不错。不过违背题目要求了哦
页:
1
[2]