汇编实验:彩色字符中间位置显示字符串

汇编实验九:在屏幕中间位置显示三行彩色字符串

80*25彩色字符模式显示缓冲区在B8000H到BFFFFH位置。一行80个字符号,160个字节。其中每个字的低位存储ASC2码,高位存储字符颜色属性。
属性格式:
  7  6  5  4  3  2  1  0
  BL  R  G  B  I  R  G  B
7闪烁; 6、5、4背景; 3高亮; 2、1、0前景  

  0  1  0  0  1  0  1  0  4ah
  0  1  0  0  0  1  0  1  45h
  0  0  1  0  0  0  0  1  21h

 1 assume cs:codes,ds:dates,ss:stacks
 2
 3 dates segment
 4     db 4ah,45h,21h ;颜色
 5     db ‘welcome to masm!‘
 6 dates ends
 7 stacks segment
 8     db 6 dup (0)
 9 stacks ends
10 codes segment
11         start:
12             mov ax,dates
13             mov ds,ax
14
15             mov ax,stacks
16             mov ss,ax
17             mov sp,25 ;3+16+6,指向栈底
18
19             mov ax,0b800h;彩色模式缓冲区
20             mov es, ax
21
22             ;(25-3)/2 = 11行
23             ;(80-16)/2 = 32列
24             ;(11-1)*160 + 32 = 1632 = 0660h
25             mov bx,0660h;
26
27             mov di,0
28             mov cx,3
29         setcolor:
30             push cx
31             push di;颜色存放偏移位置
32
33             mov ax,ds:[di];依次获取颜色值
34             mov di,ax
35             mov si,3
36             mov cx,16
37             setchar:
38                 mov al,[si]
39                 mov es:[bx],al;设置字符
40                 mov ax,di
41                 mov es:[bx+1],al;设置颜色属性
42                 add bx,2
43                 inc si
44                 loop setchar
45
46             ;输出字符串16个字节加16个属性字节
47             ;160-16*2 = 0080h
48             add bx,0080h;
49             pop di
50             pop cx
51             inc di
52             loop setcolor
53
54         mov ax,4c00h
55         int 21h
56 codes ends
57 end start                

时间: 2024-10-28 02:18:56

汇编实验:彩色字符中间位置显示字符串的相关文章

实验10 编写子程序 1.显示字符串

assume cs:code,ds:data data segment db 'Welcome to masm!',0 data ends code segment start: mov dh,8 ;dh表示行号(范围:1-25) mov dl,3 ;dl表示列号(范围:1-80)[注:每超过80等于行号自动加1] mov cl,2 ;cl中存放颜色属性(0cah为红底高亮闪烁绿色属性) mov ax,data mov ds,ax mov si,0 call show_str mov ax,4c

汇编|使用10h中断来显示字符串

特么这个问题困扰了我好久,毕竟是个OS newbie,还没有汇编的基础. 在前天的加载loader的实验中,老师要求显示字符串,但是给的代码只是显示一个字符. 愚蠢的我实在没办法,最后为了按期完成实验,只能一个个字符地输出,呀真是羞耻. 好了,趁着清明假期,花了几个小时终于弄懂了. 下面进入正题! 前戏是先对boot.asm和loader.asm编译: nasm -o boot.bin boot.asm nasm -o loader.bin loader.asm 然后把boot.bin写入软盘a

x8086汇编在显存中显示字符串

题目:在屏幕中间显示绿色,绿底红色,白底蓝色的字符串‘welcome to masm!’ 80X25彩色字符模式显示缓冲区的结构: 在内存地址结构中,B8000H~BFFFFH共32KB的空间,为80x25彩色字符模式的显示缓冲区.向这个地址空间写入数据,写入的内容将立即出现在 显示器上. 在80x25彩色模式下,显示器可以显示25行,每行80个字符,每个字符可以由256中属性. 80x25模式下,一屏的内容在显示缓冲区共4000个字符. ============================

汇编在dos下显示字符串的子程序

assume cs:code,ss:stack,ds:data 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 cl,2 mov ax,data mov ds,ax mov si,0 mov ss,stack call show_str mov ax,4c00h int 21h show_s

[算法]将字符串中的*前置,非*字符相对位置不变

如ab**cd*e12变成 ****abcde12 char* foo(char* str, int length){ int i = length-1,j = length-1; while(i >= 0 && j >= 0){ while(i >= 0 && '*' != str[i]){ --i; } j = i - 1; while(j >= 0 && '*' == str[j]){ --j; } if(j >= 0){

汇编:有关在屏幕区显示字符的四种方法

李忠老师的<x86汇编语言:从实模式到保护模式>中第五章到第七章的部分,每一章在讲述知识点的同时,分别使用了三种不同的显示字符的方法,加上调用BIOS的10h中 断的方法,这里做出一次简单梳理: 一:第五章,最基础的直接用mov 的方法 代码如下: 1 ;代码清单5-1 2 ;文件名:c05_mbr.asm 3 ;文件说明:硬盘主引导扇区代码 4 ;创建日期:2011-3-31 21:15 5 6 mov ax,0xb800 ;指向文本模式的显示缓冲区 7 mov es,ax 8 9 ;以下显

判断一个字符串通过变化字符的位置,是否可以组成回文

解法就是判断下字符串中是否有某些字符是奇数个,如果这种字符的个数大于1,说明无法组成回文:小于或等于1可以组成回文. 其中用了strlen(),放到for循环里面容易导致程序运行效率下降,比如输入的字符串很大 10^5个字符时 for(int i=0; i<strlen(string); i++)会导致程序运行很慢.改用: int length = strlen(string); for(int i=0; i<length; i++) 可以很大程度提升效率. #include <stdi

比较用户输入的两个文件,显示出所有不同处的行号与第一个不同字符的位置

1. 编写一个程序,比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置. import os import re cwd = os.getcwd() os.chdir(cwd) filename1 = input("请输入需要比较的头一个文件名:") filename2 = input("请输入需要比较的另一个文件名:") f1=open(filename1) f2=open(filename2) rownum = 0 count = 0

用python从字符列表中返回字符串字符的位置

需要从字符列表中找出每个字符在字符串中的位置,然后将整个字符位置返回到单个字符串中,每个字符位置之间的空格除外最后一个.您需要忽略所有不在字符列表中的由az中的字符组成的字符. 策略: 首先,我们需要在列表中声明az字符的列表. alphabetlist = ["a", 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm', 'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w',