sub al,al ZF=1,PF=1,SF mov al,1 ZF=0,PF=0,SF push ax pop bx add al,bl add al,10 mul al
|
实验十
打印字符
这里的重点是不知道字符串的长度,但是知道字符串十以0结尾的,所以利用 cx = 0 jcxz 会跳转,不断地置ch=0,当取到的字符cl=0时即可跳转
assume cs:code
data segment db 'Welcome to masm!', 0 data ends
code segment
start: mov dh,8 ;dh表示行号 mov dl,3 ;dl表示列号 mov cl,2 ;cl表示颜色 mov ax,data mov ds,ax mov si,0 ;字符串开始的位置
call show_str mov ax,4c00h int 21h
show_str:
mov ax,0b800h mov es,ax ;显存段
mov di,0 mov ax, 160 mul dh add di,ax
mov al,2 mul dl add di,ax ;计算开始的位置
mov bl,cl ;保存颜色,因为cx要用来计数
s: mov cl, ds:[si] ;取出字符 mov ch,0 ;当cl=0的时候,cx也等于0,此时执行jcxz jcxz ok mov es:[di], cl mov es:[di+1], bl add di,2 inc si loop s ok: ret
code ends end start
|
进制转换
assume cs:code
data segment db 10 dup(0) data ends
code segment
start: mov ax,12666 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 dtoc: mov si,9 s0: mov cx,10 mov dx,00 ;dx存放余数 div cx add dx,30H mov [si],dl
mov cx,ax ;判断商是否为0 jcxz rt
dec si inc cx ;防止cx=1的时候意外退出循环 loop s0 rt: ret
show_str:
mov ax,0b800h mov es,ax ;显存段
mov di,0 mov ax, 160 mul dh add di,ax
mov al,2 mul dl add di,ax ;计算开始的位置
mov bl,cl ;保存颜色,因为cx要用来计数
s: mov cl, ds:[si] ;取出字符 mov ch,0 ;当cl=0的时候,cx也等于0,此时执行jcxz jcxz ok mov es:[di], cl mov es:[di+1], bl add di,2 inc si loop s ok: ret
code ends end start
|