生活随笔
收集整理的這篇文章主要介紹了
8086汇编-实验10-字符打印程序
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
效果如圖:
assume cs
:codeparameters_stack segment
;程序斷點參數傳遞db
48 dup(0)
parameters_stack endsraw_stack segment
;程序斷點保存db
48 dup(0)
raw_stack endsalpha segmentdb
'ABCDEFGHIJKLMNOPQRSTUVWXYZ' ;0~25db
'abcdefghijklmnopqrstuvwxyz' ;26~51db
'HI, WELCOME TO MASM! ' ;52~77db
'I AM Cncdre FROM CHINA. ' ;78~103db
'HOW ARE YOU? ' ;104~129
alpha endscode segmentMain
:;參數傳遞mov ax
,parameters_stackmov ss
,axmov sp
,32mov ax
,26push ax
;字符串長度mov ax
,200hpush ax
;高地址為字符屬性,低地址為
0mov ax
,52push ax
;待顯示字符所在偏移地址mov ax
,alphapush ax
;待顯示字符所在段mov ax
,2000push ax
;顯存偏移地址mov ax
,0b800hpush ax
;顯存起始段地址mov ss
:[1],sp
;parameters_stack最高地址存儲此時棧頂位置
;斷點保存mov ax
,raw_stack
;call指令會自動壓入程序斷點地址
(ip
,短轉移
)mov ss
,axmov sp
,32call Sub0mov ax
,4c00h
int 21hSub0
:;小程序
0_字符打印
;參數壓棧順序
:;字符串長度
->高地址為字符屬性,低地址為
0->待顯示字符所在偏移地址
;->待顯示字符所在段
->顯存偏移地址
->顯存起始段地址
;最后在ss
:[1]存入sppush axpush espush dipush dspush sipush cxmov ss
:[1],sp
;raw_stack最高地址存儲此時棧頂位置mov ax
,parameters_stackmov ss
,axmov sp
,ss
:[1] ;parameters_stack最高地址讀取棧頂位置pop axmov es
,ax
;顯存起始段地址pop di
;顯存偏移地址pop ds
;待顯示字符所在段pop si
;待顯示字符所在偏移地址pop ax
;低地址為
0,高地址為字符屬性pop cx
;字符串長度s
:mov al
,ds
:[bx
+si
]mov es
:[di
],almov es
:[di
+1],ahinc siinc diinc diloop smov ax
,raw_stackmov ss
,axmov sp
,ss
:[1] ;raw_stack最高地址讀取棧頂位置pop cxpop sipop dspop dipop espop axret
;ret指令會自動彈出程序斷點地址賦給
ip(短轉移
)code ends
end Main
總結
以上是生活随笔為你收集整理的8086汇编-实验10-字符打印程序的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。