c语言将26个字母显示在屏幕上,汇编语言在屏幕上输出A-Z26个字母,要求红底,黄字,闪烁...

满意答案

dcebd7a0de6265b6ccae5ead692f1eab.png

lbdtez5718

2015.11.27

dcebd7a0de6265b6ccae5ead692f1eab.png

采纳率:52%    等级:12

已帮助:23749人

1234567891011121314151617181920212223242526272829303132333435363738394041在windows的dos窗口中,闪烁未实现 !stack       segment stack            dw 256   dup(?)stack       ends code        segment            assume cs:code,ss:stackstart:            mov ah,0            mov al,3            int 10h            mov ah,5            mov al,0            int 10h             mov si,26            mov bl,04eH            mov bh,0            mov al,'A'            mov ah,9            dec ala1:            mov cx,1            inc al            push ax            int 10h                     mov ah,3            int 10h            inc dl            mov ah,2            int 10h                     pop ax            dec si            jnz a1                     mov ah,4ch            int 21hcode        ends            end start追答: 使用dos功能调用是达不到效果的!要使用int 10h中断。

00分享举报

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
字符屏幕函数 Turbo C2.0的字符屏幕函数主要包括文本窗口大小的设定、窗口颜色的设置、 窗口文本的清除和输入输出等函数。 1.文本窗口的定义 Turbo C2.0默认定义的文本窗口为整个屏幕, 共有80列(或40列)25行的文本 单元, 每个单元包括一个字符和一个属性, 字符即ASCII 码字符, 属性规定该字 符的颜色和强度。 Turbo C2.0可以定义屏幕上的一个矩形域作为窗口, 使用window()函数定义。 窗口定义之后, 用有关窗口的输入输出函数就可以只在此窗口内进行操作而不超 出窗口的边界。 window()函数的调用格式为: void window(int left, int top, int right, int bottom); 该函数的原型在conio.h 中 (关于文本窗口的所有函数其头文件均为conio.h, 后面不再说明)。 函数中形式参数(int left, int top)是窗口左上角的坐标, (int right, int bottom)是窗口的右下角坐标, 其中(left, top)和(right, bottom) 是相对于整个屏幕而言的。 Turbo C 2.0规定整个屏幕的左上角坐标为 (1, 1), 右下角坐标为(80, 25)。并规定沿水平方向为 X轴, 方向朝右; 沿垂直 方向为 Y轴, 方向朝下。若window()函数中的坐标超过了屏幕坐标的界限, 则窗 口的定义就失去了意义, 也就是说定义将不起作用, 但程序编译链接时并不出错。 另外, 一个屏幕可以定义多个窗口, 但现行窗口只能有一个(因为DOS为单任 务操作系统), 当需要用另一窗口时, 可将定义该窗口的window() 函数再调用一 次, 此时该窗口便成为现行窗口了。 如要定义一个窗口左上角在屏幕(20, 5)处, 大小为30列15行的窗口可写成: window(20, 5, 50, 25); 2. 文本窗口颜色的设置 文本窗口颜色的设置包括背景颜色的设置和字符颜色的设置, 使用的函数及 其调用格式为: 设置背景颜色: void textbackground(int color); 设置字符颜色: void textcolor(int color); 有关颜色的定义见表1。 表1. 有关颜色的定义 ━━━━━━━━━━━━━━━━━━━━━━━━━━━ 符号常数 数值 含义 字符或背景 ─────────────────────────── BLACK 0 黑 两者均可 BLUE 1 兰 两者均可 GREEN 2 绿 两者均可 CYAN 3 青 两者均可 RED 4 红 两者均可 MAGENTA 5 洋红 两者均可 BROWN 6 棕 两者均可 LIGHTGRAY 7 淡灰 两者均可 DARKGRAY 8 深灰 只用于字符 LIGHTBLUE 9 淡兰 只用于字符 LIGHTGREEN 10 淡绿 只用于字符 LIGHTCYAN 11 淡青 只用于字符 LIGHTRED 12 淡红 只用于字符 LIGHTMAGENTA 13 淡洋红 只用于字符 YELLOW 14 黄 只用于字符 WHITE 15 白 只用于字符 BLINK 128 闪烁 只用于字符 ━━━━━━━━━━━━━━━━━━━━━━━━━━━ 上表中的符号常数与相应的数值等价, 二者可以互换。例如设定兰色背景可 以使用textbackground(1), 也可以使用textbackground(BLUE), 两者没有任何 区别, 只不过后者比较容易记忆, 一看就知道是兰色。 Turbo C另外还提供了一个函数, 可以同时设置文本的字符和背景颜色, 这 个函数的调用格式为: void textattr(int attr); 其中: attr的值表示颜色形式编码的信息, 每一位代表的含义如下: 位 7 6 5 4 3 2 1 0 B b b b c c c c ↓ ┕━━━┙ ┖─────┘ 闪烁 背景颜色 字符颜色 字节低四位cccc设置字符颜色(0到15), 4~6三位bbb设置背景颜色(0到7), 第7位B设置字符是否闪烁。假如要设置一个兰底黄字, 定义方法如下: textattr(YELLOW+(BLUE<<4)); 若再要求字符闪烁, 则定义变为: textattr(128+YELLOW+(BLUE<<4); 注意: (1) 对于背景只有0 到7 共八种颜色, 若取大于7 小于15的数, 则代表的 颜色与减 7后的值对应的颜色相同。 (2) 用textbackground()和textcolor() 函数设置了窗口的背景与字符颜 色后, 在没有用clrscr()函数清除窗口之前, 颜色不会改变, 直到使用了函数 clrscr(), 整个窗口和随后输出到窗口中的文本字符才会变成新颜色。 (3) 用textattr()函数时背景颜色应左移4位, 才能使3位背景颜色移到正 确位置。 下面这个程序使用了关于窗口大小的定义、颜色的设置等函数, 在一个屏幕 上不同位置定义了7个窗口, 其背景色分别使用了7种不同的颜色。 例1.: #include <stdio.h> #include <conio.h> main() { int i; textbackground(0); /* 设置屏幕背景色 */ clrscr(); /* 清除文本屏幕 */ for(i=1; i<8; i++) { window(10+i*5, 5+i, 30+i*5, 15+i); /* 定义文本窗口 */ textbackground(i); /* 定义窗口背景色 */ clrscr(); /* 清除窗口 */ } getch(); } 3. 窗口内文本的输入输出函数 一、窗口内文本的输出函数 int cprintf("<格式化字符串>", <变量表>); int cputs(char *string); int putch(int ch); cprintf()函数输出一个格式化的字符串或数值到窗口中。它与printf() 函 数的用法完全一样, 区别在于cprintf()函数的输出受窗口限制, 而printf() 函 数的输出为整个屏幕。 cputs()函数输出一个字符串到屏幕上, 它与puts()函数用法完全一样, 只 是受窗口大小的限制。 putch()函数输出一个字符到窗口内。 注意: (1) 使用以上几种函数, 当输出超出窗口的右边界时会自动转到下一行的 开始处继续输出。当窗口内填满内容仍没有结束输出时, 窗口屏幕将会自动逐行 上卷直到输出结束为止。 二、窗口内文本的输入函数 int getche(void); 该函数在前面已经讲过, 需要说明的是, getche()函数从键盘上获得一个字 符, 在屏幕显示的时候, 如果字符超过了窗口右边界, 则会被自动转移到下一 行的开始位置。 下面这个程序给例1.中加入了一些文本的输出函数。 例2.: #include <stdio.h> #include <conio.h> int main() { int i; char *c[]={"BLACK", "BLUE", "GREEN", "CYAN", "RED", "MAGENTA", "BROWN", "LIGHTGRAY"}; textbackground(0); /* 设置屏幕背景色 */ clrscr(); /* 清除文本屏幕 */ for(i=1; i<8; i++) { window(10+i*5, 5+i, 30+i*5, 15+i); /* 定义文本窗口 */ textbackground(i); /* 定义窗口背景色 */ clrscr(); /* 清除窗口 */ } getch(); return 0; } 4. 有关屏幕操作的函数 void clrscr(void); 清除当前窗口中的文本内容, 并把光标定位在窗口 的左上角(1, 1)处。 void clreol(void); 清除当前窗口中从光标位置到行尾的所有字符, 光 标位置不变。 void gotoxy(x, y); 该函数很有用, 它用来定位光标在当前窗口中的位 置。这里x, y是指光标要定位处的坐标(相对于窗口 而言), 当x, y超出了窗口的大小时, 该函数就不起 作用了。 int gettext(int xl, int yl, int x2, int y2, void *buffer); int puttext(int x1, int y1, int x2, int y2, void *buffer); gettext()函数是将屏幕上指定的矩形区域内文本内容存入buffer 指针指向 的一个内存空间。内存的大小用下式计算: 所用字节大小=行数*列数*2 其中: 行数=y2-y1+1 列数=x2-x1+1 puttext()函数则是将gettext()函数存入内存buffer中的文字内容拷贝到屏 幕上指定的位置。 int movetext(int x1, int x2, int y2, int x3, int y3); movetext()函数将屏幕上左上角为(x1, y1), 右下角为(x2, y2)的一矩形窗 口内的文本内容拷贝到左上角为(x3, y3)的新的位置。该函数的坐标也是相对于 整个屏幕而言的。 注意: 1. gettext()函数和puttext()函数中的坐标是对整个屏幕而言的, 即是屏 幕的绝对坐标, 而不是相对窗口的坐标。 2. movetext()函数是拷贝而不是移动窗口区域内容, 即使用该函数后, 原 位置区域的文本内容仍然存在。 例3. include <conio.h> main() { int i; char *f[]={"Load F3", "Pick Alt-F3", "New ", "Save F2", "Write to ", "Directory", "Change dir", "Os shee ", "Quit Alt-X"}; char buf[9*14*2]; clrscr(); textcolor(YELLOW); textbackground(BLUE); clrscr(); gettext(10, 2, 24, 11, buf); window(10, 2, 24, 11); textbackground(RED); textcolor(YELLOW); clrscr(); for(i=0; i<9; i++) { gotoxy(1, i++); cprintf("%s", f[i]); } getch(); movetext(10, 2, 24, 11, 40, 10); puttext(10, 2, 24, 11, buf); getch(); } 下面再介绍一些函数: void highvideo(void); 设置显示器高亮度显示字符。 void lowvideo(void); 设置显示器低亮度显示字符。 void normvideo(void); 使显示器返回到程序运行前的显示方式。 int wherex(void); 这两个函数返回当前窗口下光标的x, y坐标。 int wherey(void); 返回目录 
1 前言我们在开发手机版网页的时候,常常会出现下面的情景: (1) 开发时,在自己电脑上运行得好好的,在手机上打开就挂了,但是手机上又看不到error log;  (2) 上线后,某用户表示页面失灵,但我们自己又重现不出来,看不到用户侧的出错信息。如果说(1)还可以通过电脑连接手机以查看log来解决,那(2)在没有完善的前端上报体系时就非常被动了。作为开发者,我们的诉求很简单:有没有快捷的方法在手机前端页面看到log日志?2 vConsole前端调试面板莫慌,抱紧vConsole!vConsole是一款由微信公众平台前端团队打造的前端调试面板,专治手机端看log难题。目前vConsole自带有2个面板,默认为“日志”面板,负责展示log。细心的同学可能会发现上面的log颜色各有不同。与电脑端的Developer Tools一样,开发者可以通过调用不同的方法来打出不同的颜色,以便快速区分日志类型:console.log('foo'); // 白底黑字   console.info('bar'); // 白底紫字   console.debug('oh'); // 白底黄字  console.warn('foo'); // 黄底黄字  console.error('bar'); // 红底红字第二个是“系统”面板,vConsole会自动将一些基础信息(如系统版本)打印出来,方便开发者定位问题。若页面是在微信内置浏览器中打开的,vConsole还会打印出微信版本号、当前网络类型等额外信息。默认情况下,vConsole的面板是隐藏起来的。我们可以点击右下角的“面板”悬浮按钮来显示vConsole面板。3 使用方法Talk is cheap, show me the code.首先,在需要展示日志的页面引入vConsole模块。我们建议在<head>中而非<body>底部引入,方便后续的新版本vConsole在页面初始化时预埋各种debug钩子。引入后,会自动生成window.vConsole对象实例。<head>  [removed][removed]  </head>对于更通常的情况,我们只需在调试模式下才启用vConsole,平时用户无需看到调试面板。这时候就需要开发者自行判断引入模块的时机。以PHP为例,通过判断URL中有无 dev_mode参数来选择性加载vConsole:<?php if($_GET['dev_mode'=='1'){?>  [removed][removed]   <?php}?>如果项目中用到了CommonJS或SeaJS这种AMD/CMD规范的模块加载方式,可以在module中使用require()引入vConsole:var vConsole =require('path/to/vconsole.min.js');好了,怎么打印log呢?与电脑端一致,可以直接使用console.log()等方法来打印日志,目前支持的方法有:console.log('foo');  console.info('bar');  console.debug('oh');  console.warn('foo'); console.error('bar');若页面未加载vConsole模块,console.log()会直接输出到原生控制台中;加载模块后,日志则会输出到原生控制台 前端面板。因此不必担心兼容性问题。引入模块后,vConsole会有一小段时间用于初始化工作,在渲染出面板HTML之前将无法立即打印log。因此,若要在引入模块后立即打印log,应使用vConsole.ready()方法:vConsole.ready(function() { console.log('Hello World');  });4 在线demo微信扫描以下二维码(或微信内长按图片识别二维码),即可体验vConsole面板。目前vConsole已开源到WeChatFE的Github中。 标签:腾讯  前端工具
INT 80H是一个系统调用中断,用于在操作系统中执行各种服务和功能。下面是定义一个INT 80H中断并实现要求的汇编代码: ``` section .data msg db 'INT 80H Interrupt Occurred!', 0 letter db 'a', 1bh, '[44m', 1bh, '[33m', 'a', 0 section .text global _start _start: ; 显示提示信息 mov eax, 4 mov ebx, 1 mov ecx, msg mov edx, 27 int 80h ; 调用INT 80H中断 mov eax, 0 ; 选择屏幕0页 mov bh, 0x01 ; 蓝底 mov bl, 0x0e ; 黄字 mov dh, 7 ; 行数 mov dl, 13 ; 列数 mov ecx, letter ; 字符串 mov ah, 0x09 ; 中断功能号 int 80h ; 调用INT 80H中断 mov eax, 0 ; 选择屏幕0页 mov bh, 0x01 ; 蓝底 mov bl, 0x0e ; 黄字 mov dh, 7 ; 行数 mov dl, 13 ; 列数 mov ecx, letter ; 字符串 mov ah, 0x09 ; 中断功能号 int 80h ; 调用INT 80H中断 mov eax, 0 ; 选择屏幕0页 mov bh, 0x01 ; 蓝底 mov bl, 0x0e ; 黄字 mov dh, 7 ; 行数 mov dl, 13 ; 列数 mov ecx, letter ; 字符串 mov ah, 0x09 ; 中断功能号 int 80h ; 退出程序 mov eax, 1 xor ebx, ebx int 80h ``` 解释: 首先在`.data`段定义两个字符串,一个用于显示提示信息,一个用于显示字符'a'。 然后在`.text`段定义`_start`标签作为程序的入口点。在主程序中,首先使用`mov`指令将参数传递给`eax`、`ebx`、`ecx`和`edx`,然后调用`int 80h`中断以显示提示信息。 接下来,使用`mov`指令将要在屏幕显示的字符'a'的各个属性传递给寄存器,然后调用`int 80h`中断以在屏幕显示字符'a'。 最后,使用`mov`指令将参数传递给`eax`和`ebx`,然后调用`int 80h`中断以退出程序。 注意:在程序中使用的字符属性值是根据Linux系统的终端属性来设置的,如果在其他操作系统或终端上运行,可能需要调整这些值。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值