语言主程序和子程序的写法_汇编语言程序设计第三篇——汇编程序结构
學習一門語言,我們首先學其基本的數據類型和邏輯表達式的一些基本語句。為了使程序具有更加良好的運行效率,我們還需要學習它的一些設計結構。這一篇我們將以此為大家講解一些常見的程序結構,以及其在匯編語言中的設計方法。
一個好的程序應滿足以下幾個要求:
常見程序結構:
- 順序結構
- 分支結構
- 循環結構
- 子程序結構
一、順序結構
按照程序的書寫順序執行,這樣的程序結構就叫做順序結構。
例:設變量X、Y均為16位無符號數,試寫一個求表達式2X + Y值的程序:
DSEG SEGMENT X DW 34H ; 表示將十六進制數 34H 存放到 X 中Y DW 56HZ DW ?,? ; ?表示為空,也可以不寫 DSEG ENDS CSEG SEGMENT ASSUME CS: CSEG , DS: DSEG START: MOV AX, DSEG MOV DS, AX ; 讓DS指向自己定義的數據段MY_D SEGMENT XOR DX , DX MOV AX , XADD AX , AX ADC DX , 0 ; ADC能夠把進位加到DADD AX , Y ADC DX,0 MOV Z , AX MOV Z+2 , DX MOV AH , 4CH ; 因為程序都執行完成要返回dos,要將中斷號4ch送AH INT 21H ; 調用dos中斷21h,中斷調用號為AH( 即4ch),返回dos CSEG ENDSEND START匯編語言中的AX、BX、CX、DX作為CPU內部的通用寄存器中的數據寄存器助記專符用來存放參與運算的數據或是存儲運算的結果。這四個數據寄存器都是16位的,實際由兩個8位寄存器組合而成,這是為了靈活處理8位數據。二、分支結構
順序結構的程序雖然能解決計算、輸出等問題,但不能做判斷再選擇。對于要先做判斷再選擇的問題就要使用分支結構。分支結構的執行是依據一定的條件選擇執行路徑,而不是嚴格按照語句出現的物理順序。分支結構的程序設計方法的關鍵在于構造合適的分支條件和分析程序流程,根據不同的程序流程選擇適當的分支語句。
例:判斷MEMS單元的數據,若數據>0,結果為1;若數據<0,結果為-1;若數據=0,結果為0;將結果存入MEMD單元:
MY_D SEGMENT MEMS DB 08H MEMD DB ? MY_D ENDS MY_C SEGMENT ASSUME DS:MY_D , CS:MY_C START: MOV AX , MY_D ; 獲取數據段的段地址 MOV DS, AX MOV AL, MEMS ; 將待比較元素放入AL中 CMP AL, 0 JGE NEXT ; 有符號數如果>=0,則轉向next MOV AL, -1 ; 如果不滿足 >=0, 則順序執行,給AL賦值-1 JMP DONE ; 無條件跳轉指令 NEXT: JE DONE je ; 表示等于就跳轉 MOV AL, 1 ; 如果不等于的話則賦值為1 DONE: MOV MEMD, AL MOV AX , 4C00H INT 21H MY_C ENDS END START三、循環結構
在程序設計中遇到需要按照一定的規律或條件,多次重復執行一組指令的情況時,可以用循環程序實現。循環結構一般根據某一條件判斷為真或為假來確定是否重復執行循環體,條件永真或無條件的循環就是邏輯上的死循環。
循環程序通常由三部分組成:
- 循環初始化
- 循環體
- 循環控制部分
例:計算1~100的數字之和,并將結果存入變量SUM中:
DATA SEGMENTSUM DW ? ; 用于存儲計算結果 DATA ENDS CODE SEGMENTASSUME CS:CODE , DS:DATA START: MOV AX , DATAMOV DS , AX XOR AX , AX ; 將AX清零,將CF標志位也清零MOV CX , 100 AGAIN: ADD AX , CXLOOP AGAIN ; 執行LOOP指令時,CPU自動將CX的值減1,若CX=0,則結束循環;MOV SUM , AX MOV AH, 4CH INT 21H CODE ENDS END START四、子程序結構
為了簡化編程,常把功能相對獨立的程序段單獨編寫和調試,作為一個相對獨立的模塊供程序使用,這就是子程序。子程序的調用過程是通過CALL指令實現的,子程序的返回則通過RET指令完成。為了使子程序結構清晰,可以使用過程定義偽指令PROC和ENDP來定義子程序。
例:編寫子程序將寄存器AX內容乘10,結果仍存在AX中:
主程序: X EQU 1000 CODE SEGMENTASSUME CS:CODE START: MOV AX, X CALL MUL10 MOV AX, 4C00HINT 21H MUL10 PROC PUSHF PUSH BX ADD AX, AX MOV BX, AX ADD AX, AX ADD AX, AX ADD AX, BX POP BX ; 彈出堆棧,恢復現場 POPF RET MUL10 ENDP CODE ENDS END START總結
以上是生活随笔為你收集整理的语言主程序和子程序的写法_汇编语言程序设计第三篇——汇编程序结构的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 合并报表编制采用的理论_合并报表是否恢复
- 下一篇: python替换excel指定字符串_【