415968430 发表于 2012-1-11 22:28:56

花了我这么长时间终于搞定了,实验10第三个,贴出来晒晒,不能白写了

本帖最后由 415968430 于 2012-1-11 22:32 编辑

亲测mov ax,12666显示绿色的12666{:5_109:}{:5_109:}{:5_109:}{:5_109:}{:5_109:}assume cs:code

data segment
db 10 dup (0)
data ends

stack segment
db 20h dup (0)
stack ends

code segment
start:
mov ax,12666
mov dx,0
mov bx,data
mov ds,bx
mov bx,stack
mov ss,bx
mov sp,20h
mov si,0
s1:mov cx,10
call dtoc;计算ax中每一位的数
jcxz s3
add cx,30h
mov ds:,cl
inc si
jmp s1
s3:call arund;将ds中的数掉头.si为要掉头的byte个数减1





s0:mov dh,8
mov dl,3
mov cl,2
call show_str;显示ds中的数

mov ax,4c00h
int 21h


arund:
mov bx,0
mov dh,0
e:mov cx,si
mov dl,ds:
push dx
inc bx
sub cx,bx
jcxz e0
jmp e
e0:mov cx,si
mov bx,0
e1:pop ax
mov ds:,al
inc bx
loop e1
ret



dtoc:
push ax
mov ax,dx
mov dx,0
div cx
mov bx,ax;商放进bx中保存,余数在dx中正好为低16做除法时代高位
pop ax
div cx
mov cx,dx
mov dx,bx
ret

show_str:
dec dh
mov al,160
mul dh
mov bx,ax
dec dl
mov al,2
mul dl
add bx,ax
mov ax,0b800h
mov es,ax;段地址
mov di,bx;做偏移
mov bx,0
mov ah,cl
mov ch,0
s:mov cl,ds:
jcxz ok
mov es:,cl
mov es:,ah
inc bx
inc di
inc di
jmp s
ok:ret

code ends
end start

415968430 发表于 2012-1-11 22:31:13

其中那个arund是把ds掉头用的
源代码多了个dec si:
assume cs:code

data segment
db '1','2','3','4','5','6'
db 10 dup (0)
data ends

stack segment
db 30h dup (0)
stack ends

code segment
start:
mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,30h
mov si,6 ;6个数,si为形参
dec si
mov bx,0
mov dh,0
e:mov cx,si
mov dl,ds:
push dx
inc bx
sub cx,bx
jcxz e0

jmp e
e0:mov cx,si
mov bx,0
e1:pop ax
mov ds:,al
inc bx
loop e1


mov ax,4c00h
int 21h
code ends
end start
页: [1]
查看完整版本: 花了我这么长时间终于搞定了,实验10第三个,贴出来晒晒,不能白写了