組合語言小程式例子

2021-03-04 00:15:44 字數 4362 閱讀 8584

1.編寫統計ax中1、0個數的源程式。1的個數存入ch,0的個數存入cl。

code segment

assume cs:code

start: mov cx, 0

mov dx,17

aa1: sub dx, 1

jz aa3

shl ax, 1

jnc aa2

inc ch

jmp aa1

aa2: inc cl

jmp aa1

aa3: mov ah,4ch

int 21h

code ends

end start

2.編寫比較兩個字串string1和string2所含字元是否完全相同的源程式,若相同則顯示「match」,若不相同則顯示「no match」。

程式:data segment

r1 db 'match',0ah,0dh

r2 db 'no match',0ah,0dh

string1 db '***xx'

n1 equ $-string1

string2 db 'yyyyy'

n2 equ $-string2

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

mov ax,n1

cmp ax,n2

jnz aa1

add ax,1

lea si,string1

lea di,string2

aa2: mov bl,[si]

mov bh,[di]

inc si

inc di

sub ax,1

jz aa3

cmp bl,bh

jz aa2

jmp aa1

aa3: lea bx,r1

mov cx,7

aa4: mov dl,[bx]

inc bx

mov ah,2

int 21h

loop aa4

jmp e

aa1: lea bx,r2

mov cx,10

aa5: mov dl,[bx]

inc bx

mov ah,2

int 21h

loop aa5

e: mov ah,4ch

int 21h

code ends

end start

3.從鍵盤讀入乙個四位的十六進製制數,crt顯示等值的二進位制數.

由於每個十六進製制數字對應4個二進位制,所以每讀入乙個十六進製制位後,即可將其對應的4個二進位制位依次輸出。由於數字『0』~ 『9』的ascⅱ碼為30h~39h,字母『a』~『f』與 『a』~『f』的ascⅱ碼為61h~66h 與41h~46h ,因此,如果輸入的字母為數字『0』~『9』,則其低4位即為對應的二進位制位;如果輸入的字元為字母『a』~『f』或『a』~『f』,則需要減7,然後通過移位將低4位依次輸出。

匯程式設計序如下:

data segment

msg1  db  'hex:', '$'

msg2  db  0dh, 0ah, 'binary:', '$'

count equ 4

buf db 4 dup(?)

data ends

code segment

assume cs:code,ds:data

start: mov ax, data

mov ds, ax

lea dx, msg1

mov ah, 9

int 21h

mov cx, count

mov si, 0

input通過四次迴圈從鍵盤讀入四位十六進製制數

mov ah, 1

int 21h

mov buf[si], al

dec cx

inc si

cmp cx, 0

jnz input

next3: lea dx, msg2

mov ah, 9

int 21h

mov cx, count

mov si, 0

next2: mov bl, buf[si]

cmp bl , '9'

jbe ok ; 讀入的字元<=9 轉向 ok:

sub bl, 7  ;讀入字元》= 9 減7

ok: push cx

mov cl ,4

shl bl, cl ; 邏輯左移4位,低4位à高4位

mov cx, 4 ; 4次迴圈將當前處理字元的4位二進位制輸出

next1: mov dl, '0'

shl bl, 1

jnc skip

inc dl

skip: mov ah, 2

int 21h

loop next1

pop cx ;

inc si

loop next2 ; 4次迴圈將4位十六進製制數,每位轉換為對應的4位二進位制

exit: mov ah, 4ch

int 21h

code ends

end start

4.設從string開始存放乙個以$為結束標誌的字串,試編寫把字串中的字元進行分類的源程式,數字字元送入num開始的記憶體中,大寫字母送入bchar開始的記憶體區中,小寫字母存入lchar開始的記憶體中,其他字元存入other開始的記憶體區中。

data segment

string db 'abc123abc','$'

n equ $-string

num db n dup(?)

bchar db n dup(?)

lchar db n dup(?)

other db n dup(?)

data ends

code segment

assume cs:code,ds:data

start:mov ax,data

mov ds,ax

lea bx,string

dec bx

lea sp,bchar

lea cx,lchar

lea dx,other

lea si,num

aa1:inc bx

mov al,[bx判斷是否為$,是否結束

cmp al,』$』

jz aa5

cmp al,30h判定數字字元

jc aa4

cmp al,39h

ja aa2

mov [si],al

inc si

jmp aa1

aa2:cmp al,41h判定大寫字母

jc aa4

cmp al,5ah

ja aa3

mov di,sp

mov [di],al

inc sp

jmp aa1

aa3:cmp al,61h判定小寫字母

jc aa4

cmp al,7ah

ja aa4

mov di,cx

mov [di],al

inc cx

jmp aa1

aa4:mov di,dx判定其他

mov [di],al

inc dx

jmp aa1

aa5:mov ah,4ch返回dos 結束

int 21h

code ends

end start

5.試編寫找出首位址為buf資料塊中的最小偶數(該資料塊中有100個帶符號位元組數),並以十六進製制的形式顯示在crt上的源程式。

答:data segment

bufdb 100 dup要比較的數

data ends

code segment

assume cs:code,ds:data

start:

movax,data

movds,ax

leabx,bufbuf首位址送bx

movcl,101迴圈控制

movdl,126dl存放最小偶數

movah,0標誌是不是有偶數

loop1:

deccl迴圈計數減1

jztoendzf標誌0則跳轉

moval,[bxbx記憶體內容送al

incbxbx指向下一記憶體單元

8086組合語言程式格式答案

一 單項選擇題 1 c 2 d 3 a 4 b 5 c 6 d 7 d 8 c 9 a 10 b 11 b 12 d 13 b 14 c 15 a 16 c 17 b 18 b 19 a 20 a 二 多項選擇題 1 ab 2 abd 3 abc 4 cd 5 ab 6 abc 7 ac 8 ad ...

組合語言 第3章巨集組合語言

第三章巨集組合語言 一 巨集組合語言格式 3.1.1 指令語句格式 指令語句的一般格式如下 標號 指令助記符運算元 注釋 1 標號 標號是機器指令語句存放位址的符號表示,代表該指令目標 的第乙個位元組位址,後面必須緊跟冒號 2 指令助記符 指令助記符為語句的核心成分,表示了該語句的操作型別。3 運算...

組合語言總結

一 乙個完整的源程式的結構 乙個源程式一般由若干個段組成,每個分段可以是棧段 資料段和 段。乙個源程式可以有多個棧段 資料段和 段,從語法規則上來看,棧段是有明顯標誌的 段最好的型別為 code 的標記,並用cs作為段界暫存器,只有資料段不要求標誌。完整的源程式的結構一般形式如下 程式名稱 二 源程...