顯示ascii碼

/* 編譯步驟:
把此文件復(fù)制到dosbox86\tc中,
運(yùn)行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 運(yùn)行
Alt+R選擇Run->User Screen 查看結(jié)果
*/
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);     /* 設(shè)置視頻模式為80*25文本模式, 同時起到清屏效果 */
   for(j=0; j<11; j++)     /* 共11列 */
   {
      p = (char far *)0xB8000000;
      p += j*7*2;          /* 計算第j列第0行的地址, 注意各列之間相距7個字符(含空格) */
                           /* 匯編中可以根據(jù)前后兩列首地址相差14字節(jié)的規(guī)律,用加法計算
                              出下一列的地址
                            */
      for(i=0; i<25; i++)  /* 每列輸出25個ASCII碼, 即每列有25行 */
      {
         *p = a;           /* 輸出當(dāng)前ASCII字符 */
         *(p+1) = 0x0C;    /* 背景為黑色, 前景為高亮度紅色 */
         sprintf(hex, "%02X", a);
                           /* 匯編中可以利用上課講過的循環(huán)左移4位的方法把a(bǔ)的值轉(zhuǎn)化
                              成2位十六進(jìn)制并保存到數(shù)組hex中
                            */
         for(k=0; k<2; k++)/* 輸出2位十六進(jìn)制數(shù) */
         {
            *(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;代替此函數(shù)調(diào)用 */
}

對應(yīng)的匯編代碼如下:

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

        ;實現(xiàn)清屏

        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    ;寫完一個兆龙,移動兩個字節(jié)

                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碼對應(yīng)的數(shù)
                    mov ah,ds:[2]
                    mov es:[bx][di+1],ah    ;寫數(shù)的屬性
                    add di,2    ;寫完一個忙迁,移動兩個字節(jié)

                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碼對應(yīng)的數(shù)
                    mov ah,ds:[2]
                    mov es:[bx][di+1],ah    ;寫數(shù)的屬性
                    add di,2    ;寫完一個翔怎,移動兩個字節(jié)

                inc dl      ;顯示的ascii碼加1

                cmp dl,0    ;ascii碼為0則跳轉(zhuǎn)至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

結(jié)果如下:


1.jpg

DosBox下載的鏈接在下面給出
編譯運(yùn)行的方法如下:
運(yùn)行DosBox86
把.asm文件放到masm文件夾中
命令行輸入masm xxx(xxx是你的asm文件名)
緊跟著按三下回車
接著輸入link xxx
繼續(xù)按三下回車
生成可執(zhí)行文件xxx.exe
輸入xxx來運(yùn)行
DosBox86百度網(wǎng)盤鏈接:
https://pan.baidu.com/s/1t17msyPIW9gwCN2rKM7MNg
提取碼:
kss3

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末配名,一起剝皮案震驚了整個濱河市鹉梨,隨后出現(xiàn)的幾起案子蠢终,更是在濱河造成了極大的恐慌序攘,老刑警劉巖茴她,帶你破解...
    沈念sama閱讀 218,451評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異程奠,居然都是意外死亡丈牢,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,172評論 3 394
  • 文/潘曉璐 我一進(jìn)店門瞄沙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來己沛,“玉大人,你說我怎么就攤上這事距境∩昴幔” “怎么了?”我有些...
    開封第一講書人閱讀 164,782評論 0 354
  • 文/不壞的土叔 我叫張陵垫桂,是天一觀的道長师幕。 經(jīng)常有香客問我,道長诬滩,這世上最難降的妖魔是什么霹粥? 我笑而不...
    開封第一講書人閱讀 58,709評論 1 294
  • 正文 為了忘掉前任,我火速辦了婚禮疼鸟,結(jié)果婚禮上后控,老公的妹妹穿的比我還像新娘。我一直安慰自己空镜,他們只是感情好忆蚀,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,733評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著姑裂,像睡著了一般馋袜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上舶斧,一...
    開封第一講書人閱讀 51,578評論 1 305
  • 那天欣鳖,我揣著相機(jī)與錄音,去河邊找鬼茴厉。 笑死泽台,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的矾缓。 我是一名探鬼主播怀酷,決...
    沈念sama閱讀 40,320評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼嗜闻!你這毒婦竟也來了蜕依?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,241評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎样眠,沒想到半個月后友瘤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,686評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡檐束,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,878評論 3 336
  • 正文 我和宋清朗相戀三年辫秧,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片被丧。...
    茶點(diǎn)故事閱讀 39,992評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡盟戏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出甥桂,到底是詐尸還是另有隱情抓半,我是刑警寧澤,帶...
    沈念sama閱讀 35,715評論 5 346
  • 正文 年R本政府宣布格嘁,位于F島的核電站笛求,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏糕簿。R本人自食惡果不足惜探入,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,336評論 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望懂诗。 院中可真熱鬧蜂嗽,春花似錦、人聲如沸殃恒。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,912評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽离唐。三九已至病附,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間亥鬓,已是汗流浹背完沪。 一陣腳步聲響...
    開封第一講書人閱讀 33,040評論 1 270
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留嵌戈,地道東北人覆积。 一個月前我還...
    沈念sama閱讀 48,173評論 3 370
  • 正文 我出身青樓,卻偏偏與公主長得像熟呛,于是被迫代替她去往敵國和親宽档。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,947評論 2 355

推薦閱讀更多精彩內(nèi)容

  • .bat腳本基本命令語法 目錄 批處理的常見命令(未列舉的命令還比較多庵朝,請查閱幫助信息) 1吗冤、REM 和 :: 2...
    慶慶慶慶慶閱讀 8,100評論 1 19
  • Ubuntu的發(fā)音 Ubuntu昔逗,源于非洲祖魯人和科薩人的語言降传,發(fā)作 oo-boon-too 的音。了解發(fā)音是有意...
    螢火蟲de夢閱讀 99,271評論 9 467
  • 精心收集整理的教程筆記 第01天 Java基礎(chǔ)入門 第1章計算機(jī)基礎(chǔ) 1.1計算機(jī) 計算機(jī)(computer)俗稱...
    Java幫幫閱讀 5,960評論 1 109
  • 文 | 洪生鵬 1 在公司樓下勾怒,偶遇了大學(xué)時期的一位同班同學(xué)婆排。 甚是驚訝,自從畢業(yè)后笔链,我和他就再也沒見過面了段只,我都...
    洪生鵬閱讀 999評論 1 4
  • 影片一開始給男孩水杯上奧特曼貼畫的特寫是說明他特別喜愛這個卡通人物,而后來漢生所帶的奧特曼面具也是代表這個男...
    AMOY_H閱讀 336評論 0 0