匯編:具有多重循環結構和分支結構的匯編程序


假設有一個字類型的數值 arry1,試編寫程序統計 arry1 數值及其后若干數值,在字單元中存儲時每個數據中含“0”數據位的個數,並將統計結果保存在 res1 數組中。數據段的代碼定義如下:

data segment
arry1 dw 223,4037,5635,8226,11542,14430,45257,811
len equ $-arry1
res1 db len/2 dup(0)
data ends

注:可結合 shl(或 shr)指令和條件轉移指令來實現對字節數據中“0”的計數。(提示:使用 shl 或 shr 指令,移出位將寫入標志寄存器中的 CF 標志位,而條件轉移指令中正好有根據 CF 的值進行操作跳轉的指令)

源代碼

 assume ds:data, ss:stack, cs:code

data segment
    arr1 dw 223,4037,5635,8226,11542,14430,45257,811
    len equ $-arr1
    res1 dd len dup(0)
data ends

stack segment
    dw   128  dup(0)
stack ends

code segment
start:    
;初始化段寄存器
    mov ax, data
    mov ds, ax
    mov ax, stack
    mov ss, ax
    mov sp, 256 
    
;lop1:(arr1的字數)8次
    mov cx, 8                 
    mov bx, 0  ;arr1內部字節偏移 
    
lop1:        
    push cx
    mov ax, 0  ;初始化ax, 用於記錄arr1每個字中0的個數
    
;lop2: (每個字的位數)16次
    mov cx, 16
    jcxz next                 
    mov dx, word ptr[arr1][bx]  ;dx存當前的字
lop2:                          
    shl dx, 1
    jc notz ;非零跳到notz,之間的代碼不執行
    inc ax
notz:    
    loop lop2
    mov word ptr [res1][bx], ax
    
    add bx, 2
    pop cx
    loop lop1
    
next:    
    mov ax, 4c00h ; exit to operating system.
    int 21h    
code ends

end start ; set entry point and stop the assembler.

結果


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM