|
发表于 2012-11-26 21:48:41
|
显示全部楼层
本帖最后由 兄弟们,冲啊 于 2012-11-26 21:49 编辑
- assume cs:code
-
- data segment
-
- db 'Welcome to masm!',0
-
- data ends
- stack segment
-
- db 16 dup (0)
-
- stack ends
- code segment
-
- start: mov dh,8
-
- mov dl,3
-
- mov cl,2
-
- mov ax,data
-
- mov ds,ax
-
- mov ax,stack
-
- mov ss,ax
-
- mov sp,16
- ;这里你既然设置了堆栈段ss那就应该设置SP
- ;不然sp是不固定的
-
- mov ax,0B800H
- mov es,ax
- ;这是附加段你没设置
- ;mov byte ptr 0B800H[bx+DI],byte ptr [si]
- ;这样是到代码段去的DS
-
- mov di,0
- ;设置di
-
- mov si,0
-
- call show_str
-
-
- ok: mov ax,4c00h
-
- int 21h
-
-
- show_str: mov ax,0a0h ;在显存数据段中b8000h每行160字节
-
- dec dh ;获取前七行的偏移地址
-
- mul dh
-
- mov bx,ax;将上面获得第7行的字节数保存在bx中
-
- ;add ax,3 ;得到显存的第八行第三列的偏移地址
- ;这句错误你没有将列数乘以2,因为有2个字节显示字符
- ;偶字节显示字符,奇字节显示颜色
-
- mov ax,2
-
- mul dl
-
- add bx,ax;这里才是得到显存的第八行第三列的偏移地址
-
-
- S: push cx ;判断最后一个字节值是否为0
-
- mov cl,0
-
- mov ch,byte ptr [si]
-
- jcxz short ok
-
- pop cx
-
- mov al,byte ptr [si]
-
- mov byte ptr es:[bx+DI],al
-
- mov byte ptr es:[bx+DI+1],cl
-
- inc si
-
- ADD DI,2
-
- jmp near ptr S
-
-
- code ends
-
- end start
复制代码
|
评分
-
查看全部评分
|