显示ascii码

/* 编译步骤:
把此文件复制到dosbox86\tc中,
运行dosbox86
File->DOS Shell
cd \tc
tc
Alt+F选择File->Load->ascii.c
Alt+C选择Compile->Compile to OBJ 编译
Alt+C选择Compile->Line EXE file 连接
Alt+R选择Run->Run 运行
Alt+R选择Run->User Screen 查看结果
*/
C语言程序如下:

#include <dos.h>
#include <bios.h>
main()
{
   unsigned char a=0, hex[3];
   char far *p = (char far *)0xB8000000;
   int i, j, k;
   _AX = 0x0003;
   geninterrupt(0x10);     /* 设置视频模式为80*25文本模式, 同时起到清屏效果 */
   for(j=0; j<11; j++)     /* 共11列 */
   {
      p = (char far *)0xB8000000;
      p += j*7*2;          /* 计算第j列第0行的地址, 注意各列之间相距7个字符(含空格) */
                           /* 汇编中可以根据前后两列首地址相差14字节的规律,用加法计算
                              出下一列的地址
                            */
      for(i=0; i<25; i++)  /* 每列输出25个ASCII码, 即每列有25行 */
      {
         *p = a;           /* 输出当前ASCII字符 */
         *(p+1) = 0x0C;    /* 背景为黑色, 前景为高亮度红色 */
         sprintf(hex, "%02X", a);
                           /* 汇编中可以利用上课讲过的循环左移4位的方法把a的值转化
                              成2位十六进制并保存到数组hex中
                            */
         for(k=0; k<2; k++)/* 输出2位十六进制数 */
         {
            *(p+2+k*2) = hex[k];
            *(p+2+k*2+1) = 0x0A; /* 背景为黑色, 前景为高亮度绿色 */
         }
         a++;
         if(a==0)          /* 若a从0xFF变成0x00, 表示256个ASCII码已穷尽 */
            goto done;
         p += 160;         /* p指向第j列的第i+1行 */
      }
   }
   done:
   bioskey(0);             /* 汇编中可以用mov ah,0; int 16h;代替此函数调用 */
}

对应的汇编代码如下:

assume cs:code,ds:data,ss:stack

data segment
    a db 0h;
    color_ascii db  0Ch ;背景黑色,前景高亮度红色   00001100
    color_num   db  0Ah ;背景黑色,前景高亮度绿色   00001010
data ends

stack segment
    db 16 dup (0)
stack ends

code segment
    start:
    cls:
        mov ax,0B800H   ;显存地址
        mov es,ax
        mov bx,0
        mov cx,4000     ;文本模式显示25行,80字  
    s:
        mov dx,0
        mov es:[bx],dx        
        add bx,2
        loop s

        ;实现清屏

        mov ax,data
        mov ds,ax
        mov ax,stack
        mov ss,ax
        mov sp,16
        mov ax,0B800H   ;第1行起始位置
        mov es,ax

        mov dl,0    ;从第0个字符开始
        mov bx,0
        mov cx,11 
        mov di,0  

        loop_x:
            push cx
            mov cx,25
            loop_y:
                push cx
                mov al,dl
                mov es:[bx][di],al  ;写ASCII码
                mov ah,ds:[1]
                mov es:[bx][di+1],ah    ;写ASCII码的属性
                add di,2    ;写完一个,移动两个字节

                mov al,dl
                mov ah,0
                mov cl,4
                rol ax,cl

                cmp ah,0Ah
                jb  num1
                jnb character1

                num1:
                    add ah,30h

                character1:
                    cmp ah,10h
                    jnb write1
                    add ah,37h

                write1:
                    mov es:[bx][di],ah  ;写ASCII码对应的数
                    mov ah,ds:[2]
                    mov es:[bx][di+1],ah    ;写数的属性
                    add di,2    ;写完一个,移动两个字节

                mov al,dl
                mov ah,0
                mov cl,4
                rol ax,cl
                ror al,cl

                cmp al,0Ah
                jb  num2
                jnb character2

                num2:
                    add al,30h

                character2:
                    cmp al,10h
                    jnb write2
                    add al,37h

                write2:
                    mov es:[bx][di],al  ;写ASCII码对应的数
                    mov ah,ds:[2]
                    mov es:[bx][di+1],ah    ;写数的属性
                    add di,2    ;写完一个,移动两个字节

                inc dl      ;显示的ascii码加1

                cmp dl,0    ;ascii码为0则跳转至exit
                je  exit 

                add bx,160
                sub di,6

                pop cx
            loop loop_y
            pop cx
            
            mov al,12
            sub al,cl
            mov bl,14
            mul bl
            mov di,0
            add di,ax
            
            ;切换到下一列

            mov bx,0

        loop again

        again:  jmp loop_x

        exit:
            mov ah,0
            int 16h

code ends
end start

结果如下:


1.jpg

DosBox下载的链接在下面给出
编译运行的方法如下:
运行DosBox86
把.asm文件放到masm文件夹中
命令行输入masm xxx(xxx是你的asm文件名)
紧跟着按三下回车
接着输入link xxx
继续按三下回车
生成可执行文件xxx.exe
输入xxx来运行
DosBox86百度网盘链接:
https://pan.baidu.com/s/1t17msyPIW9gwCN2rKM7MNg
提取码:
kss3

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • .bat脚本基本命令语法 目录 批处理的常见命令(未列举的命令还比较多,请查阅帮助信息) 1、REM 和 :: 2...
    庆庆庆庆庆阅读 8,036评论 1 19
  • Ubuntu的发音 Ubuntu,源于非洲祖鲁人和科萨人的语言,发作 oo-boon-too 的音。了解发音是有意...
    萤火虫de梦阅读 99,126评论 9 467
  • 精心收集整理的教程笔记 第01天 Java基础入门 第1章计算机基础 1.1计算机 计算机(computer)俗称...
    Java帮帮阅读 5,943评论 1 109
  • 文 | 洪生鹏 1 在公司楼下,偶遇了大学时期的一位同班同学。 甚是惊讶,自从毕业后,我和他就再也没见过面了,我都...
    洪生鹏阅读 991评论 1 4
  • 影片一开始给男孩水杯上奥特曼贴画的特写是说明他特别喜爱这个卡通人物,而后来汉生所带的奥特曼面具也是代表这个男...
    AMOY_H阅读 321评论 0 0