assume cs:code,ds:data data segment db 'welcome to masm!',0 data ends code segment start: mov dh,8 mov dl,1 mov cl,2 mov ax,data mov ds,ax mov si,0 call show_str mov ax,4c00h int 21h ;显示字符串函数 dh为行号dl为列号cl为颜色 show_str:mov bl,cl push cx push si mov ax,0B800H mov es,ax ;显存段地址进es mov al,160 ;行号和列号的偏移地址准备就绪 mul dh mov di,ax mov al,2 mul dl add di,ax s:mov cl,ds:[si] mov ch,0 jcxz ok ;到字符串末尾0跳到ok mov es:[di],cl mov es:[di+1],bl add di,2 inc si jmp s ok:pop si pop cx ret code ends end start
assume cs:code,ss:stack stack segment dw 16 dup(0) stack ends code segment start:mov ax,0ffffh ;低16位 mov dx,0fffh ;高16位 mov cx,0ah ;除数 call divdw mov ax,4c00h int 21h ;32位除法 结果:dx放搞16位,ax放低16位 cx放商 divdw:mov bx,ax ;低16位暂存 mov ax,dx mov dx,0 ;dx ax div cx ;0 被除数高16位 push ax ;商push ;(rem(H/N)*65536+L) /N ; 上一步的余 低16位 除数 mov ax,bx ; DX bx->ax cx div cx ;事情做完 mov cx,dx ;DX余,ax商 pop bx mov dx,bx ret code ends end start
assume cs:code,ds:data,ss:stack data segment db 16 dup(0) data ends stack segment db 16 dup(0) stack ends code segment start:mov ax,34694 mov bx,data mov ds,bx mov si,0 call dtoc mov dh,8 mov dl,3 mov cl,2 call show_str mov ax,4c00h int 21h ;将word型数据转变位表示十进制数的字符串,字符串以0为结尾符 ;参数ax,写入ds:[si] dtoc:push si mov di,0 dtocs1:mov bx,10 ;16位除法 mov dx,0 div bx add dx,30h ;数字是倒叙的,所以要利用栈后进先出的特性改顺序 push dx inc di mov cx,ax jcxz dtocs2 jmp dtocs1 ;正序 dtocs2:mov cx,di dtocs3:pop ds:[si] inc si loop dtocs3 mov ds:[si],0 ;0结尾 pop si ret ;;显示字符串函数 dh为行号dl为列号cl为颜色 show_str:mov bl,cl push cx push si mov ax,0B800H mov es,ax ;显存段地址进es mov al,160 ;行号和列号的偏移地址准备就绪 mul dh mov di,ax mov al,2 mul dl add di,ax shows1:mov cl,ds:[si] mov ch,0 jcxz showok ;到字符串末尾0跳到ok mov es:[di],cl mov es:[di+1],bl add di,2 inc si jmp shows1 showok:pop si pop cx ret code ends end start