彙編原始碼學習8 FAR 子程式遠呼叫

2021-09-30 09:55:29 字數 1420 閱讀 5196

;將ax中的值以十進位制形式輸出

assume ds:data1,ss:stack1

data1 segment

decimal db 6 dup(?),'$(編譯時去掉此處括號)'

temp db 6 dup(?)

data1 ends

;stack1 segment stack

db 256 dup(?)

stack1 ends

;不同段的子程式——output in decimal

;好像只能放在主程式的前面

code2 segment

outdec proc far

assume cs:code2

;begin:暫存器保護,將子程式中用到的暫存器儲存

push di

push bx

push cx

push dx

push si

;end

lea di,temp

mov bx,10

mov cx,0 ;記錄十進位制數的位數

again: xor dx,dx

div bx

mov [di],dl ;儲存餘數

inc di

inc cx

cmp ax,0

jne again

mov si,offset decimal

add si,cx

mov [si],'$(編譯時去掉此處括號)' ;字串結束符

dec si

lea di,temp

next: mov al,[di]

mov [si],al

add [si],30h ;轉為ascii碼

dec si

inc di

dec cx

cmp cx,0

jne next

lea dx,decimal

mov ah,9

int 21h

;begin:暫存器恢復

pop si

pop dx

pop cx

pop bx

pop di

;end

retoutdec endp

code2 ends

;主程式

code1 segment

assume cs:code1

start: mov ax,data1

mov ds,ax

; mov ax,0ffffh ;設定ax的值;不能寫成ffffh

call far ptr outdec

mov ah,4ch

int 21h

code1 ends

end start

彙編原始碼學習1 找出最大的數

找出最大的數,存放在al assume cs code1,ss stack1,ds data1 data1 segment array db 1,8,9,2,5,4,7,6,3,10 data1 ends stack1 segment stack 這裡必須加stack db 256 dup stac...

彙編原始碼學習5 輸入字串

輸入9個以內的字元並輸出 data1 segment string db 10,10 dup 編譯時去掉此處括號中的內容 第1個單元存放限制輸入的字元個數,含回車符13 第2個單元存放實際輸入的字元個數,不含回車符13 實際的字串從第3個單元開始 data1 ends stack1 segment ...

彙編學習筆記8

第八講.由於前天把第7講又聽了一遍,昨天是第8講.第7講用了兩天才聽完.第8講繼續講述指令.在第7講裡講了三個指令 5個 movxchg lea,lds,les 它們各有各的限制.mov,源運算元和目的運算元不能都是儲存單元,目的運算元不能是立即數,源運算元和目的運算元不能都是段暫存器,立即數不能作...