首页
社区
课程
招聘
[旧帖] [求助]请教各位我这里储蓄哦的原因,一个小程序,里面有详细解释.谢谢了 0.00雪花
发表于: 2009-8-4 03:01 2574

[旧帖] [求助]请教各位我这里储蓄哦的原因,一个小程序,里面有详细解释.谢谢了 0.00雪花

2009-8-4 03:01
2574
;这段代码的功能是向屏幕输出数据段里面的字符,以0为结束符号
;show_str是实现这段代码的子程序
;dh为行数,dl为列数,cl为字体颜色
assume cs:code,ss:stack
data segment
db 'welcome to masm!',0
data ends
stack segment
dw 8 dup (0)
stack ends
code segment
start:mov dh,8
mov dl,3
mov ch,0
mov cl,02h
mov ax,stack
mov ss,ax
mov sp,10H
mov ax,data
mov ds,ax
mov ax,0b800H
mov es,ax
mov si,0
call show_str
mov ax,4c00h
int 21h

show_str:mov ax,0   
mov al,160        ;这里我的思路是向把160和行数相乘然后得到他的偏移量一行要占160个字节
mul dh
push ax
mov ax,0
mov al,2          ;列数相乘得到偏移量,因为一列要占两个字节
mul dl
push dl
pop di
pop ax
add di,ax         ;取出来相加,结果放在di里面
mov ah,cl         ;把颜色代码放进ah里面
s:jcxz ok                ;判断字符串是否为0
mov  cl,byte ptr ds:[si]      
mov al,byte ptr ds:[si]    ;把第一个字符串放进al里面  
mov word ptr es:[di],ax   ; 把ax输入进显示区域.
inc si         
add di,2
jmp short s   
ok:ret
code ends
end start

编译的时候出现:
Microsoft (R) Macro Assembler Version 5.00
Copyright (C) Microsoft Corp 1981-1985, 1987.  All rights reserved.

27.ASM(32): warning A4057: Illegal size for operand

  50690 + 415710 Bytes symbol space free

      1 Warning Errors
      0 Severe  Errors

想半天想不出来..请教各位了.!

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 199
活跃值: (65)
能力值: ( LV5,RANK:70 )
在线值:
发帖
回帖
粉丝
2
我自己想出来了..不用麻烦大伙了.!
2009-8-4 03:10
0
游客
登录 | 注册 方可回帖
返回
//