题目:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcome to masm!'.

该程序题目来自《王爽 汇编语言_第2版》的188页的说明。相关资料也在上面都有详细说明。

题目很简单,然后从网上看了下其他人的程序,然后又根据自己的想法写了如下程序:

assume cs:codesg

data segment
db 'Welcome to masm!'
data ends stack segment
db dup()
stack ends codesg segment
start:mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,
mov ax,0b8a0h ;0b800h 用于显示的缓存
mov es,ax ;B80000~BFFFF
;000-09f 第一行
;0a0-13f 第二行
;140-1df 第三行 ;颜色属性数据
; 0 = Black 8 = Gray
; 1 = Blue 9 = Light Blue
; 2 = Green A = Light Green
; 3 = Aqua B = Light Aqua
; 4 = Red C = Light Red
; 5 = Purple D = Light Purple
; 6 = Yellow E = Light Yellow
; 7 = White F = Bright White mov cx,
mov dl,39h ;第一位表示背景色,第二位表示前景色
mov bx, ;行控制 s:
push cx
mov ax,
mov di, ;列控制 mov cx,
s0:mov es:[bx+di],al
inc di
mov es:[bx+di],dl
inc di
loop s0 mov cx,
mov si, s1:mov al,ds:[si]
mov es:[bx+di],al
inc di
mov es:[bx+di],dl
inc di
inc si
loop s1 mov cx,0a0h
sub cx,di
push dx
mov ax,cx
mov cx,
div cl
mov cx,ax
pop dx
mov ax, s2:mov es:[bx+di],al
inc di
mov es:[bx+di],dl
inc di
loop s2 pop cx
add dl,11h
add bx,
loop s mov ax,4c00h
int 21h
codesg ends
end start

下面的程序是我从网上参考的,我试试了下,只显示一行,如果你要用下面的代码还需要自己修改修改

assume cs:code,ds:data
data segment
db 'welcome to masm!'
db 02h,24h,71h
data ends
code segment
start:
mov ax,0b872H
mov es,ax mov ax,data
mov ds,ax mov bx,
mov cx,
mov di,
s:
mov al,ds:[bx]
mov ah,ds:[]
mov es:[di],ax
inc bx
add di,
loop s mov ax,4c00h
int 21h
code ends
end start

参考出处:http://www.tuicool.com/articles/3MJ3qi
以上两个程序请自己编译链接,本人亲自进行测试。

在来个升级版的,使用子程序输出字符串。

功能:循环三行输出'Welcome masm!',然后再输出一行'this is name!'

assume cs:codesg

data segment
db 'Welcome masm!',
db 'this is name!',
data ends stack segment
db dup()
stack ends codesg segment
start:mov ax,data
mov ds,ax
mov ax,stack
mov ss,ax
mov sp,
mov cx, mov si,ds
mov dx,808h
s0:
mov di,
call showStr
add dx,100h
loop s0 mov di, ;定义偏移
add dx,100h
and dl,
call showStr mov ax,4c00h
int 21h ;si表示数据首地址,di表示数据首地址的偏移,
;dh表示行,dl表示列,
showStr:
push ax
push bx
push cx
push dx
push es
mov ax,0b800h
mov es,ax
push ds
mov ds,si xor ax,ax
mov al,dh
mov bx,
mul bl
push si
mov si,di
push ax ;行
xor ax,ax
mov al,dl
mov bl,
mul bl
;push al ;列
mov di,ax ;列
pop bx ;行
;xor cx,cx
mov al,0ech ;字体的颜色属性
showRead:
mov cl,ds:[si]
jcxz back
mov es:[bx+di],cl
inc di
mov es:[bx+di],al
inc si
inc di
jmp showRead
back:
pop si
pop ds
pop es
pop dx
pop cx
pop bx
pop ax
ret codesg ends
end start

运行:编译链接后会产生一个exe文件,在cmd窗口用debug xxx.exe的方式载入程序,然后按p命令执行。

然后就会在屏幕中看到“welcome to masm!”

汇编题目:在窗口上显示Welcome to masm!的更多相关文章

  1. Delphi中,除了应用程序主窗口会显示在任务栏上,其它窗口默认都不会显示在任务栏.

    Delphi中,除了应用程序主窗口会显示在任务栏上,其它窗口默认都不会显示在任务栏. Delphi中,除了应用程序主窗口会显示在任务栏上,其它窗口默认都不会显示在任务栏.没有MS开发环境中的ShowI ...

  2. Qt的窗口如何显示在spi屏幕上

    问题:我们可以将qt移植到H3上,但是如果要将窗口通过spi屏进行显示应该怎么做呢,和framebuffer又有什么关系? 这里只说一下qt在spi屏上显示的技术原理,具体的实现还需要自己努力. 一. ...

  3. Python tkinter库将matplotlib图表显示在GUI窗口上,并实时更新刷新数据

    代码 1 ''' 2 使用matplotlib创建图表,并显示在tk窗口 3 ''' 4 import matplotlib.pyplot as plt 5 from matplotlib.pylab ...

  4. OS X 使用技巧——在Finder窗口标题栏上显示路径

    Finder窗口默认显示当前文件夹的名称或当前所在的模式(例如AirDrop).如果想要显示路径(用User/[当前用户账号名称]/Documents 替代以前显示的Documents),打开终端并运 ...

  5. 汇编题目:按A键,当松开的时显示字母A

    安装一个新的int9中断例程,功能:在DOS下,按下“A”键后,除非不再松开,如果松开,就显示满屏的“A”:其他的按键照常处理.提示:按下一个键时产生的扫描码称为通码,松开一个键时产生的扫描码称为断码 ...

  6. 将图片在指定窗口中显示-OpenCV应用学习笔记一

    1.OpenCV模块划分 OpenCV其实就是一堆用C和C++语言来实现计算机视觉算法的源代码文件:例如C接口函数cvCany()实现了Canny边缘提取算法,我们可以直接将这些源代码添加到自己的软件 ...

  7. CMD窗口正确显示UTF-8字符

     Go语言教程 http://yiibai.com/go/  CMD窗口正确显示UTF-8字符 http://www.360doc.com/content/13/0424/13/2569758_280 ...

  8. 8位灰度图在LCD上显示

    一.概述 1.灰度 灰度使用黑色调表示物体,即用黑色为基准色,不同的饱和度的黑色来显示图像.每个灰度对象都具有从 0%(白色)到灰度条100%(黑色)的亮度值. 使用黑白或灰度扫描仪生成的图像通常以灰 ...

  9. 【opengl】OpenGL中三维物体显示在二维屏幕上显示的变换过程

    转自:http://blog.sina.com.cn/s/blog_957b9fdb0100zesv.html 为了说明在三维物体到二维图象之间,需要经过什么样的变换,我们引入了相机(Camera)模 ...

随机推荐

  1. Office 365系列(二) -一些比较容易混淆的概念

    上一篇比较简明地说了Office 365怎么注册使用,在继续探讨之前先讨论一些比较容易混淆的概念! 1. Office 365:  是微软云计划的一部分包括Exchange online, Lync ...

  2. Python的自省机制

    什么是自省? 在日常生活中,自省(introspection)是一种自我检查行为. 在计算机编程中,自省是指这种能力:检查某些事物以确定它是什么.它知道什么以及它能做什么.自省向程序员提供了极大的灵活 ...

  3. [luogu3413]萌数

    [luogu3413]萌数 luogu 考虑数位dp 怎么判断一个数是不是萌数? 只要知道其中某一位和它的前一位相等或者和前一位的前一位相等,那么它就是一个萌数 什么样的数不是萌数? 对于它的每一位都 ...

  4. 【学员管理系统】0x03 老师信息管理功能

    [学员管理系统]0x03 老师信息管理功能 老师信息管理相比于学生信息管理又多了一点,因为我们的数据结构中老师表和班级表是通过teacher2class表进行多对多关联的. 写在前面 项目详细需求参见 ...

  5. Django在不启动server的情况下调用方法

    from django.conf import settingsfrom django import template settings.configure() a = template.Templa ...

  6. 使用asn1tools进行asn1编解码

    最近在做3GPP的编解码,发现有两个第三方库比较好用.一个是ASN1C(c语言编译环境),一个是python第三方库asn1tools.这里介绍下asn1tools的使用方法: 1 第一步:生成asn ...

  7. 怎样解决KEIL 5 编译KEIL4的带有RTX系统的project解决方法

        1.笔者个人对KEIL5与KEIL4的比較             相较于KEIL 5 的"华丽",笔者还是喜欢KEIL4的"内敛".主要也还是习惯了, ...

  8. JVM虚拟机调参

    一.堆大小设置JVM 中最大堆大小有三方面限制:相关操作系统的数据模型(32-bt还是64-bit)限制:系统的可用虚拟内存限制:系统的可用物理内存限制.32位系统下,一般限制在1.5G~2G:64为 ...

  9. Scala window下安装

    第一步:Java 设置 检测方法前文已说明,这里不再描述. 如果还为安装,可以参考我们的Java 开发环境配置. 接下来,我们可以从 Scala 官网地址 http://www.scala-lang. ...

  10. zabbix实现mysql数据库的监控(二)

    上章我们把zabbix的服务端和客户端都部署完成了,本章接着进行两部分的设置: 1  添加对mysql数据库主机的监控 2  添加对mysql数据库的监控 一.对数据库服务器主机监控 1 创建主机 步 ...