組合語言變數累加

時間 2021-09-02 04:46:43

1樓:匿名使用者

code segment

assume cs:code,ds:code

s1 db 129,78,99,72,63,51,49,37,253,199

odd_num equ 1 ;奇數

even_num equ 0 ;偶數

parity equ odd_num ;相與結果存於奇數位元組

start: push cs

pop ds

push cs

pop es ;使資料段、附加段與**段同段

cldlea si,s1 ;變數s1首位址裝入源變址暫存器si

mov cx,5 ;迴圈次數(10個位元組,兩兩相與,迴圈5次)

.if parity==odd_num ;若把相與結果存於奇數位元組

l1: lodsb ;讀入偶數位元組至累加器al(這條指令執行後,si自動增1)

and [si],al ;相與的結果存於奇數位元組

inc si ;準備處理後面的兩個位元組

loop l1

.elseif parity==even_num ;若把相與結果存於偶數位元組

l2: inc si ;si增1,準備讀取奇數位元組

lodsb ;讀入奇數位元組至累加器al

and [si-2],al ;相與的結果存於偶數位元組

loop l2

.endif

exit_proc: mov ah,4ch ;結束程式

int 21h

code ends

end start ;編譯到此結束

用偽指令實現分支結構

為了改善組合語言源程式的結構,減少顯式轉移語句所帶來混亂,在巨集彙編masm 6.11系統中,增加了表達分支結構的偽指令。該偽指令的書寫格式與高階語言的書寫方式相類似,匯程式設計序在彙編時會自動增加轉移指令和相應的標號。

理解並掌握該知識,對將來學習《編譯原理》課程也有一定的幫助。

分支偽指令的具體格式如下:

格式1:

.if condition ;以英文「句號」開頭

指令序列 ;條件"condition"成立時所執行的指令序列

.endif

格式2:

.if condition

指令序列1

.else

指令序列2 ;條件"condition"不成立時所執行的指令序列

.endif

格式3:

.if condition1

指令序列1

.elseif condition2

指令序列2 ;條件"condition2"成立時所執行的指令序列

.endif

其中:條件表示式「condition」的書寫方式與c語言中條件表示式的書寫方式相似,也可用括號來組成複雜的條件表示式。

條件表示式中可用的操作符有:==(等於)、!=(不等)、>(大於)、>=(大於等於)、<(小於)、<=(小於等於)、&(位操作與)、!

(邏輯非)、&&(邏輯與)、||(邏輯或)等。

若在條件表示式中檢測標誌位的資訊,則可以使用的符號名有:carry?(相當於cf==1)、overflow?

(of==1)、parity?(pf==1)、sign?(sf==1)、zero?

(zf==1)等。例如:

.if carry? && ax != bx ;檢測cf==1且ax!=bx是否成立

;組合語言指令序列

.endif

在指令序列中,還可再含有其它的.if偽指令,即:允許巢狀。偽指令.elseif引導出另乙個二叉分支,但它不能作偽指令塊的第乙個偽指令。

匯程式設計序在對「條件表示式」進行**轉換時將進行**優化處理,以便盡可能生成最好的指令**。如:

.if ax == 0

匯程式設計序會把它轉換為指令「or ax, ax」,而不是「cmp ax, 0」,因為前者比後者更好,而不是簡單直接地轉換為後者。

2樓:冉恨陽

data segment

input db 'input num:','$'

buf db 10

n db ?

char db 10 dup(0)

sum db 0

data ends

stack segment stack

db 200 dup(0)

stack ends

code segment

assume ds:data,cs:code,ss:stackstart: mov ax,data

mov ds,ax

mov dx,offset input

mov ah,9

int 21h

mov ah,2

mov dl,0ah

int 21h

mov dl,0dh

int 21h

mov dx,offset buf

mov ah,0ah

int 21h

mov si,offset char

mov al,0

mov cl,n

lop: add al,[si]

inc si

loop lop

mov ah,4ch

int 21h

code ends

end start

什麼是組合語言,什麼是彙編和組合語言?

叢依波弘瀾 組合語言 assembly language 是面向機器的程式設計語言。在彙編語閤中,用助記符 memoni 代替操作碼,用地址符號 symbol 或標號 label 代替地址媽。這樣用符號代替機器語盲的二進位制碼,就把機器語音變成了組合語言。於是組合語言亦稱為符號語言。使用組合語言編寫...

什麼是組合語言,什麼是彙編和組合語言?

組合語言就是計算機語言,它是有0,1組成的.通俗的說就是我們人和計算機交流的語言. 介於機器語言和高階語言之間的一種 什麼是彙編和組合語言? 揚落 彙編語copy言是一種低階計算bai機程式語言,說 低階du 並不是指語言的功能和複雜程度,而是它zhi出現在計算機發展史dao的早期,但現在仍廣泛應用...

《組合語言程式設計題目解答,組合語言程式設計題目,線上等答案!!!!急!!!!!!!!!!

3 計算1090h 1280h的和。4 ax 1090h,bx 90h。5 mov dx,1 mov ax,100h mov bx,16 imul bx 1 執行後,ax f000h,bx 16,dx ffffh 2 若將imul改為mul則執行完後,ax 1600h,bx 16,dx 000bh ...