|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
第二个是抄的网上的,这个感觉还不错(其实我没去搞太明白,那个公式就没太懂怎么用。。。)、
但是第一个和第三个是我完全原创,尤其是第三个,比百度到的强多了啊,很有成就感!!废话不多说,下面贴上
虽然我知道有很多大牛,也基本没人看。。。我是初学,头一次发帖,轻拍
第一个
assume cs:code,ds:data
data segment
db 'welcome to masm!',0,1
data ends
code segment
show_str: mov ax,0b800h
mov es,ax
mov al,160
mul dh
push ax
mov al,2
mul dl
pop di
add di,ax ;将显示起始位置计算并设置为 es:[di]
mov bl,cl ;将cl值传入bl留用颜色设置
print: mov ch,0
mov cl,ds:[si]
jcxz print_end ;若读取字符为0时跳至结束
mov es:[di],cl ;设置字符内容
mov es:[di+1],bl ;设置字符颜色
inc si
add di,2 ;移动指针
jmp short print
print_end:ret
start: mov dh,8
mov dl,10
mov cl,2
mov ax,data
mov ds,ax
call show_str
mov ax,4c00h
int 21h
code ends
end start
第二个
assume cs:code
code segment
divdw: push ax
mov dx,ax
mov dx,0
div cx
pop bx
push ax
mov ax,bx
div cx
mov cx,dx
pop dx
divdw_end:ret
start: mov ax,4240h
mov dx,000fh
mov cx,0ah
call divdw
mov ax,4c00h
int 21h
code ends
end start
第三个
assume cs:code
data segment
db 10 dup(0)
data ends
code segment
dotc: mov bx,10 ;设置除数
mov di,0 ;设置结果的存储顺序
dstart: mov dx,0 ;因为商要大于255,所以要用32位被除数,dx要设为0
div bx
mov cx,ax ;当商为0时,要结束计算,跳转
add dl,30h ;设置ASCⅡ码
push dx ;要进栈,之后在放出来,因为要逆序存储,否则结果是反的
inc si ;记录结果的位数
jcxz s ;cx=0时,跳转
jmp short dstart
s: mov cx,si ;根据结果的位数设置循环次数
s1: pop dx
mov [di],dl;存储到ds时要用字节,但是出栈时必须是两位的字,此时用dl的内容即可
inc di
loop s1 ;循环,将栈内数据都转移到ds段中
dotc_end:ret
show_str: mov ax,0b800h
mov es,ax
mov al,160
mul dh
push ax
mov al,2
mul dl
pop di
add di,ax ;将显示起始位置计算并设置为 es:[di]
mov bl,cl ;将cl值传入bl留用颜色设置
print: mov ch,0
mov cl,ds:[si]
jcxz print_end ;若读取字符为0时跳至结束
mov es:[di],cl ;设置字符内容
mov es:[di+1],bl ;设置字符颜色
inc si
add di,2 ;移动指针
jmp short print
print_end:ret
start: mov ax,12666
mov bx,data
mov ds,bx
mov si,0
call dotc
mov dh,8
mov dl,3
mov cl,2
mov si,0
call show_str
mov ax,4c00h
int 21h
code ends
end start
|
|