汇编小试牛刀显示welcome to masm

在理解实验9时我首先在debug在直接对显示缓冲区B8000十六进制数进行直接修改。在dos中看到了效果,也就理解了原理。

后来就着手汇编了。

其实很简单

就是将自己定义好的data段中‘welcome to masm’和属性数据写入B800段偏移地址为0780中

assume cs:code,ds:data
data segment
db 'welcome to masm!'
data ends
code segment
start: mov ax,data
mov ds,ax 
mov ax,0b800h
mov es,ax 

mov cx,16
mov bx,0
mov ax,0780h
mov di,ax
mov ah,0


s: mov al,[bx] 
mov es:[di],ax
mov byte ptr es:[di+1],02h
inc bx
add di,2
loop s ;welcome..录入

mov ax,0780h
mov di,ax

mov byte ptr es:[di+17],24h
mov byte ptr es:[di+19],24h

mov byte ptr es:[di+23],71h
mov byte ptr es:[di+25],71h
mov byte ptr es:[di+27],71h
mov byte ptr es:[di+29],71h
mov byte ptr es:[di+31],0f1h


mov ax,4c00h
int 21h

code ends
end start

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是用汇编语言在页面中间显示"Welcome to masm!"句子,并且要显示三种颜色的代码: ``` .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib .data msg db 'Welcome to masm!',0 .code start: ; 获取屏幕尺寸 invoke GetSystemMetrics, SM_CXSCREEN mov ebx, eax ; 屏幕宽度存储到ebx中 invoke GetSystemMetrics, SM_CYSCREEN mov ecx, eax ; 屏幕高度存储到ecx中 ; 获取字体大小 invoke CreateFont, 32, 0, 0, 0, FW_NORMAL, FALSE, FALSE, FALSE, ANSI_CHARSET, OUT_DEFAULT_PRECIS, CLIP_DEFAULT_PRECIS, DEFAULT_QUALITY, DEFAULT_PITCH, offset msg mov eax, [esp+24] ; 获取HDC参数,存储到eax中 invoke SelectObject, eax, eax ; 将字体选入设备上下文中 invoke GetTextExtentPoint32, eax, offset msg, lengthof msg, addr siz ; 获取文本尺寸 sub ebx, [siz] ; 计算左侧空白像素数 shr ebx, 1 ; 计算左侧起始像素数 mov edx, [siz+4] ; 获取文本高度 sub ecx, edx ; 计算上侧空白像素数 shr ecx, 1 ; 计算上侧起始像素数 ; 在屏幕中央输出文本 invoke GetDC, NULL mov esi, eax ; HDC存储到esi中 mov eax, RGB(255, 0, 0) ; 设置红色 invoke SetTextColor, esi, eax mov eax, RGB(0, 255, 0) ; 设置绿色 invoke SetBkColor, esi, eax mov eax, [esp+4] ; 获取HINSTANCE参数,存储到eax中 invoke DrawText, esi, offset msg, lengthof msg, \ ADDR rc, DT_SINGLELINE or DT_CENTER or DT_VCENTER ; 居中显示文本 invoke MessageBox, NULL, offset msg, offset msg, MB_OK invoke ReleaseDC, NULL, esi invoke ExitProcess, 0 end start ``` 这段代码使用了Windows API函数来获取屏幕尺寸、设置字体大小和颜色、在屏幕中央输出文本,并在程序结束时释放设备上下文和退出程序。其中,红色和绿色的颜色代码分别是RGB(255, 0, 0)和RGB(0, 255, 0),可以根据需要修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值