对于《汇编语言》实验10.1,增加了有条件转移指令,遇到字符串里的0,就跳出程序,停止转换。
org 0100h
start@:
mov dh,15 ;显示在屏幕的行数
mov dl,20 ;显示在屏幕的列数
mov cl,2 ;显示在屏幕的颜色
mov ax,cs
mov ds,ax
mov ss,ax
mov sp,stackStart@
mov si,0
call show_str
jmp $
mov ax,4c00h
int 21h
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
show_str: ;屏显子程序,接收三个参数
mov al,160
mov bl,dh
mul bl
add dl,dl
mov bl,dl
mov bh,0
add ax,bx
mov bx,dataStart@
add si,ax
mov dh,cl
mov cx,dataEnd@-dataStart@
s@:
push cx ;将循环次数入栈,保存起来
mov cl,[bx] ;将字符串的单个字符放入cl
mov ch,0 ;补全cx
jcxz return@ ;若内容为0,则跳出循环
mov dl,[bx]
mov ax,0b800h
mov ds,ax
mov [ds:si],dx
mov ax,cs
mov ds,ax
inc bx
add si,2
pop cx ;恢复循环次数cx
loop s@
return@:
pop cx ;弹出cx,不然会影响ret的正确返回
ret
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
dataStart@:
db '-_-! Welcome to fasm!',0,'I am here!' ;data区,存放要处理的数据
dataEnd@:
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
stackEnd@:
db 100 dup ('*') ;堆栈区初始化
stackStart@:
阅读(1349) | 评论(0) | 转发(0) |