|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
第一题,速度不错 1小时弄出来了,未看教程- assume cs:code
- data segment
- db 'Welcome to masm!',0
- data ends
- code segment
- start:
- mov dh,8
- mov dl,3
- mov cl,2
- 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 ;定义ES是写入段
- sub dl,1 ;列数减1
- mov al,2 ;因每个显示的字占两个字节,所以要乘2 所以AL=2
- mul dl ;乘列数得出列数的地址
- mov bx,ax ;将要写入的列地址放入BX保存
- mov ah,0 ;ah清0
- mov al,dh ;行数给AX,此时AX应是00行数
- mov dx,160 ;每行160个字节 此时DX的2个参数已经读过了所有可以覆盖
- mul dx ;行数乘160个字节算出要写入的行地址
- add bx,ax ;将行数地址和列数地址相加算出实际要写入的地址,放入AX中
- mov dh,cl ;将颜色数据放入高地址DH中
- s: mov ch,0 ;ch清0
- mov cl,byte ptr ds:[si] ;将数据段字符放入Cl中
- jcxz s1 ;如果CX=0则跳转到S1结束
- mov ch,dh ;将放入DH中的颜色数据拿回来给CL
- mov word ptr es:[bx],cx ;将CX的值写入到实际地址中
- add si,1
- add bx,2
- jmp s
- s1:
- ret
- code ends
- end start
复制代码
|
|