日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 >

汇编实验 用表格形式显示字符(附源码详细注释和相关注意的知识)

發布時間:2025/6/17 50 豆豆
生活随笔 收集整理的這篇文章主要介紹了 汇编实验 用表格形式显示字符(附源码详细注释和相关注意的知识) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。 本文鏈接:https://blog.csdn.net/qq_40774175/article/details/82867157

基礎知識:

換行的ASCII碼:10 ,也就是0ah

回車的ASCII碼:13 ,也就是0dh

一般先回車,再換行

1. 匯編中的幾個常用標志符號

??CF是進位標志,
?PF是奇偶標志
?AF是輔助進位標志
?ZF是零標志
?SF是符號標志
?OF是溢出標志.

2. cmp 的使用

?cmp 是將兩個操作數進行相減,但是不保存結果,只保存相關的標志(AF,ZF等),有了這些標志,可以輔助于轉移語句中。

?

3. 條件轉移指令及轉移條件

??

je ? ? 等于則轉移 ? ? ? ? zf=1

jne ? 不等于則轉移 ? ? zf=0

jb ? ? ?低于則轉移 ? ? ? ?cf=1

jnb ? ?不低于則轉移 ? ?cf=0

ja ? ? ? 高于則轉移 ? ? ? ?cf=0且zf=0

jna ? ? 不高于則轉移 ? ?cf=1或zf=1

4. loop 語句

?loop 循環語句利用cx的值來記錄循環次數,每次減一,直到為0。

?

5. int 21h

? ?int 21h 是系統調用,執行它以后,干什么取決于ax中的內容:

? ?

AH

功能

調用參數

返回參數

00

程序終止(同INT 20H)

CS=程序段前綴

01

鍵盤輸入并回顯

AL=輸入字符

02

顯示輸出

DL=輸出字符

03

異步通迅輸入

AL=輸入數據

04

異步通迅輸出

DL=輸出數據

05

打印機輸出

DL=輸出字符

06

直接控制臺I/O

DL=FF(輸入)
DL=字符(輸出)

AL=輸入字符

07

鍵盤輸入(無回顯)

AL=輸入字符

08

鍵盤輸入(無回顯)
檢測Ctrl-Break

AL=輸入字符

09

顯示字符串

DS:DX=串地址
'$'結束字符串

0A

鍵盤輸入到緩沖區

DS:DX=緩沖區首地址
(DS:DX)=緩沖區最大字符數

(DS:DX+1)=實際輸入的字符數

0B

檢驗鍵盤狀態

AL=00?有輸入
AL=FF?無輸入

0C

清除輸入緩沖區并
請求指定的輸入功能

AL=輸入功能號
(1,6,7,8,A)

0D

磁盤復位

清除文件緩沖區

0E

指定當前缺省的磁盤驅動器

DL=驅動器號?0=A,1=B,...

AL=驅動器數

0F

打開文件

DS:DX=FCB首地址

AL=00?文件找到
AL=FF?文件未找到

10

關閉文件

DS:DX=FCB首地址

AL=00?目錄修改成功
AL=FF?目錄中未找到文件

11

查找第一個目錄項

DS:DX=FCB首地址

AL=00?找到
AL=FF?未找到

12

查找下一個目錄項

DS:DX=FCB首地址
(文件中帶有*或?)

AL=00?找到
AL=FF?未找到

13

刪除文件

DS:DX=FCB首地址

AL=00?刪除成功
AL=FF?未找到

14
?

順序讀
?

DS:DX=FCB首地址
?

AL=00?讀成功
? =01?文件結束,記錄中無數據
? =02 DTA空間不夠
? =03?文件結束,記錄不完整

15

順序寫

DS:DX=FCB首地址

AL=00?寫成功
? =01?盤滿
? =02 DTA空間不夠

16

建文件

DS:DX=FCB首地址

AL=00?建立成功
? =FF?無磁盤空間

17

文件改名

DS:DX=FCB首地址
(DS:DX+1)=舊文件名
(DS:DX+17)=新文件名

AL=00?成功
AL=FF?未成功

19

取當前缺省磁盤驅動器

AL=缺省的驅動器號?0=A,1=B,2=C,...

1A

置DTA地址

DS:DX=DTA地址

1B
?

取缺省驅動器FAT信息
?

AL=每簇的扇區數
DS:BX=FAT標識字節
CX=物理扇區大小
DX=缺省驅動器的簇數

1C

取任一驅動器FAT信息

DL=驅動器號

同上

21
?

隨機讀
?

DS:DX=FCB首地址
?

AL=00?讀成功
? =01?文件結束
? =02?緩沖區溢出
? =03?緩沖區不滿

22

隨機寫

DS:DX=FCB首地址

AL=00?寫成功
? =01?盤滿
? =02?緩沖區溢出

23

測定文件大小

DS:DX=FCB首地址

AL=00?成功(文件長度填入FCB)
AL=FF?未找到

24

設置隨機記錄號

DS:DX=FCB首地址

25

設置中斷向量

DS:DX=中斷向量
AL=中斷類型號

26

建立程序段前綴

DX=新的程序段前綴

27
?

隨機分塊讀
?

DS:DX=FCB首地址
CX=記錄數

AL=00?讀成功
? =01?文件結束
? =02?緩沖區太小,傳輸結束
? =03?緩沖區不滿

28

隨機分塊寫

DS:DX=FCB首地址
CX=記錄數

AL=00?寫成功
? =01?盤滿
? =02?緩沖區溢出

29

分析文件名

ES:DI=FCB首地址
DS:SI=ASCIIZ串
AL=控制分析標志

AL=00?標準文件
? =01?多義文件
? =02?非法盤符

2A

取日期

CX=年
DH:DL=月:日(二進制)

2B

設置日期

CX:DH:DL=年:月:日

AL=00?成功
? =FF?無效

2C

取時間

CH:CL=時:分
DH:DL=秒:1/100秒

2D

設置時間

CH:CL=時:分
DH:DL=秒:1/100秒

AL=00?成功
? =FF?無效

2E

置磁盤自動讀寫標志

AL=00?關閉標志
AL=01?打開標志

2F

取磁盤緩沖區的首址

ES:BX=緩沖區首址

30

取DOS版本號

AH=發行號,AL=版本

31

結束并駐留

AL=返回碼
DX=駐留區大小

33
?

Ctrl-Break檢測
?

AL=00?取狀態
? =01?置狀態(DL)
DL=00?關閉檢測
? =01?打開檢測

DL=00?關閉Ctrl-Break檢測
? =01?打開Ctrl-Break檢測

35

取中斷向量

AL=中斷類型

ES:BX=中斷向量

36

?

取空閑磁盤空間

?

DL=驅動器號?
0=缺省,1=A,2=B,...
?

成功:AX=每簇扇區數
???? BX=有效簇數
???? CX=每扇區字節數
???? DX=總簇數
失敗:AX=FFFF

38

置/取國家信息

DS:DX=信息區首地址

BX=國家碼(國際電話前綴碼)
AX=錯誤碼

39

建立子目錄(MKDIR)

DS:DX=ASCIIZ串地址

AX=錯誤碼

3A

刪除子目錄(RMDIR)

DS:DX=ASCIIZ串地址

AX=錯誤碼

3B

改變當前目錄(CHDIR)

DS:DX=ASCIIZ串地址

AX=錯誤碼

3C

建立文件

DS:DX=ASCIIZ串地址
CX=文件屬性

成功:AX=文件代號
錯誤:AX=錯誤碼

3D
?

打開文件
?

DS:DX=ASCIIZ串地址
AL=0?讀
? =1?寫
? =3?讀/寫

成功:AX=文件代號
錯誤:AX=錯誤碼

3E

關閉文件

BX=文件代號

失敗:AX=錯誤碼

3F
?

讀文件或設備
?

DS:DX=數據緩沖區地址
BX=文件代號
CX=讀取的字節數

讀成功:
? AX=實際讀入的字節數
? AX=0?已到文件尾
讀出錯:AX=錯誤碼

40

寫文件或設備

DS:DX=數據緩沖區地址
BX=文件代號
CX=寫入的字節數

寫成功:
? AX=實際寫入的字節數
寫出錯:AX=錯誤碼

41

刪除文件

DS:DX=ASCIIZ串地址

成功:AX=00
出錯:AX=錯誤碼(2,5)

42

?

移動文件指針

?

BX=文件代號
CX:DX=位移量
AL=移動方式(0:從文件頭絕對位移,1:從當前位置相對移動,2:從文件尾絕對位移)

成功:DX:AX=新文件指針位置
出錯:AX=錯誤碼
?

43
?

置/取文件屬性
?

DS:DX=ASCIIZ串地址
AL=0?取文件屬性
AL=1?置文件屬性
CX=文件屬性

成功:CX=文件屬性
失敗:CX=錯誤碼

44



?

設備文件I/O控制



?

BX=文件代號
AL=0?取狀態
? =1?置狀態DX
? =2?讀數據
? =3?寫數據
? =6?取輸入狀態
? =7?取輸出狀態

DX=設備信息



?

45

復制文件代號

BX=文件代號1

成功:AX=文件代號2
失敗:AX=錯誤碼

46

人工復制文件代號

BX=文件代號1
CX=文件代號2

失敗:AX=錯誤碼

47

取當前目錄路徑名

DL=驅動器號
DS:SI=ASCIIZ串地址

(DS:SI)=ASCIIZ串
失敗:AX=出錯碼

48

分配內存空間

BX=申請內存容量

成功:AX=分配內存首地
失敗:BX=最大可用內存

49

釋放內容空間

ES=內存起始段地址

失敗:AX=錯誤碼

4A

調整已分配的存儲塊

ES=原內存起始地址
BX=再申請的容量

失敗:BX=最大可用空間
???? AX=錯誤碼

4B
?

裝配/執行程序
?

DS:DX=ASCIIZ串地址
ES:BX=參數區首地址
AL=0?裝入執行
AL=3?裝入不執行

失敗:AX=錯誤碼
?

4C

帶返回碼結束

AL=返回碼

4D

取返回代碼

AX=返回代碼

4E

查找第一個匹配文件

DS:DX=ASCIIZ串地址
CX=屬性

AX=出錯代碼(02,18)

4F

查找下一個匹配文件

DS:DX=ASCIIZ串地址
(文件名中帶有?或*)

AX=出錯代碼(18)

54

取盤自動讀寫標志

AL=當前標志值

56

文件改名

DS:DX=ASCIIZ串(舊)
ES:DI=ASCIIZ串(新)

AX=出錯碼(03,05,17)

57

置/取文件日期和時間

BX=文件代號
AL=0?讀取
AL=1?設置(DX:CX)

DX:CX=日期和時間
失敗:AX=錯誤碼

58

取/置分配策略碼

AL=0?取碼
AL=1?置碼(BX)

成功:AX=策略碼
失敗:AX=錯誤碼

59
?

取擴充錯誤碼
?

AX=擴充錯誤碼
BH=錯誤類型
BL=建議的操作
CH=錯誤場所

5A

建立臨時文件

CX=文件屬性
DS:DX=ASCIIZ串地址

成功:AX=文件代號
失敗:AX=錯誤碼

5B

建立新文件

CX=文件屬性
DS:DX=ASCIIZ串地址

成功:AX=文件代號
失敗:AX=錯誤碼

5C

?

控制文件存取

?

AL=00封鎖
? =01開啟
BX=文件代號
CX:DX=文件位移
SI:DI=文件長度

失敗:AX=錯誤碼

?

62

取程序段前綴

BX=PSP地址

<p class="cye-lm-tag">&nbsp;</p></td></tr></tbody></table></div></td></tr></tbody></table></div></td></tr></tbody></table></div><p class="cye-lm-tag">&nbsp;</p>

6. 輸出換行

?

? mov dl,0ah??//換行

? ?int 21h?

??mov dl,0dh??//回車符,作用是用來確認

? int 21h

7. 代碼和注釋

  • code segment
  • assume cs:code
  • start:
  • mov dx,0010h //數字0
  • next:
  • mov cx,10h //計數16列
  • loop1:
  • mov ah,02h
  • int 21h //系統調用,至于做什么事,取決于你往al里面放什么
  • inc dx // +1
  • push dx //放入棧中
  • mov dl,0
  • int 21h
  • pop dx //將dx移除站內
  • loop loop1 //利用cx的計數器來控制循環計數
  • push dx
  • mov dl,0ah //換行
  • int 21h
  • mov dl,0dh //回車符,開始顯示下一行
  • int 21h
  • pop dx
  • cmp dx,100h
  • jb next //低于100h則轉移,看cf ,cf=1,代表有進位或借位,說明小于,可以進行轉移。
  • mov ah,4ch //帶返回碼結束
  • int 21h
  • code ends //結束定義的段
  • end start //結束程序
  • ?

    源碼2:

    ;PROGRAM TITLE GOES HERE --SMASCII
    ;*********************************
    prognam segment
    ;---------------------------------
    main proc far //proc應該是“程序調用”的意思
    assumecs:prognam
    start:
    ;MAIN PART OF PROGRAM GOES HERE
    mov dl,10h //ah=02h時,是“顯示輸出”的功能,DL=輸出字符
    mov di,15 //15行
    loop1:
    mov cx,16 //16列
    next:
    movah,02h //顯示ASCII碼為10H的字符,
    int21h
    call space //space是子程序名字,此前并未定義,是的呀,以前程序中,跳轉到的程序段之前也沒有定義,是后面才定義的,但能夠正確執行,這和C語言中的函數需要事先聲明有點兒不同。
    inc dl
    loop next ;會自動把cx減去1
    call enter ;一行顯示結束,進行回車、換行
    dec di
    jne loop1 //若di減去1后不等于0,那么就繼續到loop1執行循環,不會執行下面的ret,若di-1后==0,那么程序結束,執行ret
    ret
    space proc
    push dx
    mov dl,20h ;ascII為20h的字符是可以顯示的空格,應該是每顯示一個字符,就 調用一次子程序space,來顯示一個空格(可是要求中不是讓用NUL把兩個字符隔開嗎?可是NUL是不可顯示的控制字符,用mov ah,02h int 21h也就沒有意義了呀(02顯示輸出DL=輸出字符),到底是不是這樣呢?自己可以用debug或者另外一個源文件試一下,把這里的mov dl,20h改為mov dl,00h,運行是什么情況和效果)
    mov ah,02h
    int21h
    pop dx ;疑問:為什么這里要進行push和pop呢?(是因為顯示完空格之后,要把dl的值加1,顯示下一個ASCII碼對應的字符,如果不保存dx,那么dl直接被改變為20h了,下一次Inc dl時,就都是從20h加1,而不是從正確的dl值加1了)進行子程序調用時,默認保存的是ip寄存器,其他要保存和恢復的現場要自己在子程序中手動模擬實現嗎?
    ret
    space endp
    enter proc
    pushdx
    mov dl,0dh ;回車
    movah,02h
    int21h
    movdl,0ah ;換行
    movah,02h
    int21h
    pop dx
    ret
    enter endp
    main endp
    ;---------------------
    prognam ends
    ;***********************
    end start

    不帶注釋的源碼2:

    ;PROGRAM TITLE GOES HERE --SMASCII
    ;*********************************
    prognam segment
    ;---------------------------------
    main proc far
    assume cs:prognam
    start:
    ;MAIN PART OF PROGRAM GOES HERE
    mov dl,10h
    mov di,15
    loop1:
    mov cx,16
    next:
    mov ah,02h
    int 21h
    call space
    inc dl
    loop next
    call enter
    dec di
    ;jne loop1
    jnz loop1
    ;ret
    mov ah,4ch ;return to DOS
    int 21h

    space proc
    push dx
    mov dl,00h
    mov ah,02h
    int 21h
    pop dx
    ret
    space endp
    enter proc
    push dx
    mov dl,0dh
    mov ah,02h
    int 21h
    mov dl,0ah
    mov ah,02h
    int 21h
    pop dx
    ret
    enter endp
    main endp
    ;---------------------
    prognam ends
    ;***********************
    end start

    相關問題和注意點

    1.字符’\0’和空格鍵是不是同一個概念 ?
    答:’\0’和空格不是同一個概念。
    ‘\0’表示字符串結束符,代表字符串結束,而空格是一個普通字符,顯示在文本中可以選中。
    ‘\0’的ASCII碼為0,空格的ASCII碼為32,兩個不是同一個字符
    在計算機程序中通常使用’\0’表示字符串結束,空格為文本字符,二者完全不同
    不是,字符’\0’是結束符,和空格不是一個概念。比如一個字符串,是以字符’\0’結束,而一個字符串中是可以有空格的,如:“your name”
    2.匯編語言main proc far是什么意思
    答:(1)far和near是子程序調用時的參數
    如果子程序和調用程序在一個段內,子程序參數設置為near
    如果子程序和調用程序不在一個段內,子程序參數設置為far
    這里主程序定義為far是因為:
    系統把主程序當作DOS調用的一個子程序
    DOS內核與主程序不是在同一個段地址內
    所以主程序參數要用far。
    (2)proc是子程序定義偽指令, far是該子程序的屬性,決定調用程序和子程序是否在同一代碼段。如下為子程序定義及說明 :
    子程序名 PROC NEAR ( 或 FAR )
    ……
    ret子程序名 ENDP
    (子程序名為符合語法的標識符)
    3.CALL(LCALL)指令執行時,進行兩步操作:   (1)將程序當前執行的位置IP壓入堆棧中;   (2)轉移到調用的子程序。   (CALL近調用,LCALL遠調用,   CALL 尋址2K空間范圍   LCALL 尋址64K空間范圍)   CALL與RET結合使用,當CALL調用的子程序運行到RET命令時,壓入堆棧的IP彈出,跳出子程序,開始執行CALL的下一條語句。
    一般來說,執行一條CALL指令相當于執行一條PUSH指令加一條JMP指令。
    自己總結的子程序編寫的結構:
    ·····································································
    子程序名 proc
    保存現場(push 應該保存的一些寄存器)
    子程序的功能對應的指令
    恢復現場(如果前面保存了多個寄存器,則按照括號匹配的原則按順序彈出)
    ret
    子程序名 endp
    ············································································
    注意:系統把主程序當作DOS調用的一個子程序
    proc 和 endp 相當于一個括號,里面是一個過程的代碼。編譯器通過這兩個符號找到代碼,進行處理。

    4.匯編中支持多行注釋嗎?
    答:(1)nasm,masm,tasm 不支持多行注釋
    可以用
    ; comment
    ; comment
    ; comment
    ; comment
    來實現。
    (3)如果注釋過長不能在一行完成,那么應該在第1列單獨起一行,但不宜頻繁使用以防淹沒代碼行.如果是多行注釋可以寫成注釋塊,注釋塊與代碼行以空注釋行相分隔如下所示:
    ;
    ; comment
    ; comment
    ; comment

    5.ENDP、ENDS、END、HLT的區別:
    ENDP 表示PROC所定義的過程結束. (end procedure)
    ENDS 表示SEGMENT定義的段結束. (end segment)
    END 程序結束.
    8086匯編語言中HLT代表什么?與END的區別在哪里?
    答:HLT是CPU指令CPU遇到該指令停止執行命令
    END是匯編編譯器的偽指令,不會被CPU執行,只會被編譯器執行。
    6.Intel80x86系列匯編語言中的LOOP指令,是循環指令,循環次數由計數寄存器CX指定。是否執行循環體的判斷指令在循環體之后,所以,至少執行1次循環體,即至少循環1次。執行LOOP指令時,CPU自動將CX的值減1,若CX=0,則結束循環;否則,重復執行循環體。
    簡言之:loop指令會自動把cx的值減一,若不為0,則繼續執行循環體。
    7.匯編語言中je 和jne的區別
    這兩條指令都是對ZF的判斷,只是ZF= 1的時候je des表示跳轉到des處,而jne用法相似,當ZF = 0的時候跳轉,而修改ZF位則是前面的指令執行結果,一般是減法或者cmp等等,簡單記憶就是je為相等轉移,jne是不相等轉移
    上面說的正確嗎?那么je和jne與jz和jnz還有什么區別呢?不就一樣了嗎?
    jz 表示當zf =1 時跳轉,即結果為0跳轉。jnz 即 zf=0 時跳轉,即結果不為0 跳轉。
    是正確的,網上的一些說法:
    JE ,JZ兩個命令有什么區別?
    諸多回答:應該是一樣的吧……兩個命令譯成機器都是74,對于CPU來說,這兩條命令是沒有分別的
    幾乎沒有分別,都是相等就轉的意思。
    看起來方便些. cmp指令后用je; test指令后用jz, 這樣子上下文看著比較順!
    一樣。一個指令兩種寫法。
    這只是編譯器上做的處理,他們是一樣的,還記得匯編語言的開發目的和定義嗎?是為了讓人們從煩瑣單調的機器碼中解放出來.
    8.RET指令的內部操作是:棧頂字單元出棧,其值賦給IP寄存器。即實現了一個程序的轉移,將棧頂字單元保存的偏移地址作為下一條指令的偏移地址。
    關于ret和mov ah,4ch int 21h
    (1)RET 是子程序返回用的
    調用子程序用的是call 標號 這個標號就是子程序的入口 就是一個跳轉 但是得保護現場(因為調用完了需要返回到CALL 標號的下條指令) 如果是近距離的call 則 需要執行3步 1 CS入棧 2 IP入棧 3跳到標號
    而子程序結束后 RET 的功能是 1 IP出棧 2 CS出棧(這就返回了) 返回后執行CALL 標號的下一條指令

    而 mov ax,4c00h
    int 21h
    是返回DOS的功能調用
    (2)ret 是用于子程序返回,返回調用該子程序的地方mov ah,4ch int 21h 返回DOS系統
    9.匯編語言中的psp空間干什么用的?
    (1)段前綴是操作系統在執行程序時為程序所建立的一個信息塊, 里面包括了傳遞給待運行程序的命令行參數, 程序運行結束時返回DOS所需的地址等有用的信息.
    COM格式比較特殊,數據段,代碼段,堆棧段集中在一個段里,連PSP也集中在這個段里, 于是段的前100H就用來存放PSP了.
    EXE文件在運行時DS/ES的初值設為PSP的段地址,可以直接用偏移0-100H訪問PSP的內容。
    (2)一般來說,PSP是256個字節,當程度生成了可執行文件以后,在執行的時候,先將程序調入內存,這個時候DS中存入程序在內存中的段地址,緊接著是程序的一些說明,比如說程序占用多大空間等等,這就是PSP,一般PSP占256個字節,然后才是真正的程序地址,將CS指向這里,IP設為0000,為什么一般CS要比DS大10H,就是因為這個原因,簡單說:DS存放的是程序段地址,由于PSP的存在,真正要執行的地址是DS再加上256個字節,真正的地址是DS16+256化簡一下:DS16+0+1616=16(DS+16)真正的地址又可以寫成:cs*16+0
    所以CS相當于DS+16,化成十六制是DS+10
    10.助記符和操作數可以連在一起嗎?
    例如movcx,16的寫法是否正確呢?
    不正確,一定要分開,否則會報錯,說你這一行缺少direction,因為連在一起后,編譯器就無法正確識別了。
    11.匯編中注釋的分號只能寫在第一列嗎?
    答:不是,這是無稽之談。
    12.很多代碼都會以start:表示開始,以end start表示結束,但有個問題
    start: 表示一個標號,最后可不可不要end start這一句,
    因在一個代碼中出現了很多標號時,并沒有見到每個標號都以“end 標號” 去表示結束
    答:start:表示這兒第一條匯編開始運行,
    end start表示匯編指令結束了,,, 匯編就那么個語法,你怎么去掉。。

    PS:endp表示子程序結束處
    ends表示段定義結束,數據段、附加數據段、堆棧、代碼段結束處。。
    個人理解:假如start不是表示程序從此處開始執行,而僅僅是一個標號的作用,那么最后面
    就不要寫為end start,而要寫為end main(當匯編從main開始執行時)
    總結了,就是匯編程序的第一句從哪兒開始執行,最后面表示end assembly的語句中的end后面就跟的是什么,不一定是start,也不一定是main,甚至可以是你自己定義的(表示程序最開始從哪兒執行的)標號的名字,都是名稱而已。
    13.匯編語言的偽指令是什么?
    答:不直接產生機器碼的指令,主要用于協助匯編程序進行匯編,比如定位指令org、常量定義指令equ、程序塊指令segment/ends或proc/endp或micro/endm 等等。
    就是不會轉化成機器碼的指令 像mov ax,bx這樣的代碼匯編以后會轉化成機器碼 但是像 .section這樣的源碼只是在編譯過程中有效,編譯以后的機器碼就與它無關了,叫偽指令。
    偽指令不生成真正的執行代碼… 但是又不能缺少! 因為它可能定義一些完成編譯 不可缺少的條件或東西。
    14.匯編中push和pop的操作數可以是什么?Push dl可以嗎?還是必須是push dx?
    答:push pop 只對字操作(不允許字節進棧)操作數長度為32位時進出棧為雙字。
    例如 push dl是不正確的,應該是push dx
    15.本實驗發現中間用ASCII碼為0的字符和空格字符分隔它們,顯示結果是一樣的,而且
    用mov ah,4ch int 21h的方法返回DOS更好,用ret沒有成功返回,有時候會出現問題。

    總結

    以上是生活随笔為你收集整理的汇编实验 用表格形式显示字符(附源码详细注释和相关注意的知识)的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。