微機原理 匯程式設計序

2022-11-24 06:30:04 字數 7764 閱讀 6119

微機原理

1陣列straing中存放著多個8位有符號數,以「$」結束,要求分成正陣列和負陣列分別存放,並統計兩個陣列的個數,分別存於正、負陣列的第乙個位元組

data segment

dat1 db 12h,0f3h,38h,32h,0e6h,67h,0d9h,"$"

buf1 db 10 dup(00h)

buf2 db 10 dup(00h)

ends

stack segment

dw 128 dup(0)

ends

code segment

start:

mov ax, data

mov ds, ax

mov es, ax

mov si,offset dat1

mov di,offset buf1+1

mov bx,offset buf2+1

mov cx,0

lop1:

lodsb

cmp al,'$'

je lop3

test al,80h

jnz fushu

stosb

inc cl

jmp lop2

fushu:

xchg bx,di

stosb

inc ch

xchg bx,di

lop2:

jmp lop1

lop3:

mov di,offset buf1

mov [di],cl

mov bx,offset buf2

mov [bx],ch

ends

end start

2將資料塊dat1中的20個單位元組數,複製到dat2中,並從中檢索與2eh相同的數,將此單元的數換成空格符。如有多個與2eh相同的數,要求統計出個數,存在暫存器dl中

data segment

dat1 db 12h,2eh,0f3h,2eh,38h,2eh,32h,2eh,0e6h,67h,12h,2eh,0f3h,2eh,38h,2eh,32h,2eh,0e6h,67h

kong db 00h,00h

dat2 db 20 dup(00h)

ends

stack segment

dw 128 dup(0)

ends

code segment

start:

mov ax, data

mov ds, ax

mov es, ax

mov si,offset dat1

mov di,offset dat2

cldmov cx,20

rep movsb

mov si,offset dat2

cldmov cx,20

mov bh,2eh

lop:

lodsb

cmp al,bh

jne done

inc bl

mov [si-1],0ffh ;以0ffh代替2eh

done:loop lop

wan:

mov dl,bl

ends

end start

3將變數var1中的16位二進位制數取反,並統計原數中1的個數,將個數存在變數var2中

data segment

var1 dw 54d3h

kong db 00h,00h

var2 db 00h

ends

stack segment

dw 128 dup(0)

ends

code segment

start:

mov ax, data

mov ds, ax

mov es, ax

mov si,offset var2

mov di,offset var1

mov ax,[di]

mov bx,[di]

not bx

mov [di],bx

mov bl,0

mov cx,16

lop1:

sal ax,1

jnc lop2

inc bl

lop2:

loop lop1

mov [si],bl

ends

end start

4找出資料塊dat1中的15個8位有符號數中,最大的偶數和最小的奇數,分別存在變數max和min中

data segment

dat1 db 31h,0e6h,78h,45h,62h,89h,31h,08h,42h,0d5h,8eh,56h,03h,22h,37h

kong db 00h,00h

max db 00h

min db 00h

ends

stack segment

dw 128 dup(0)

ends

code segment

start:

mov ax, data

mov ds, ax

mov es, ax

mov si,offset dat1

mov di,offset max

mov bx,offset min

mov cx,15

lop1:

lodsb

test al,01h

jnz jishu

cmp [di],al

jge lop2

mov [di],al

jmp lop2

jishu:

cmp al,[bx]

jge lop2

mov [bx],al

lop2:

loop lop1

ends

endstart5將變數var1中的16位二進位制數,變成4個ascⅱ碼,存在var2開始的4記憶體單元中

data segment

var1 dw 238dh

kong db 00h,00h

var2 db 4 dup(00h)

ends

stack segment

dw 128 dup(0)

ends

code segment

start:

mov ax, data

mov ds, ax

mov es, ax

mov si,offset var1

mov di,offset var2

mov bx,[si]

mov al,bl

call htoasc

mov [di],al

shr bl,4

mov al,bl

call htoasc

mov [di+1],al

mov al,bh

call htoasc

mov [di+2],al

shr bh,4

mov al,bh

call htoasc

mov [di+3],al

hlthtoasc proc

and al,0fh ;只取dl的低4位

or al,30h ;dl高4位變成3

cmp al,39h ;是0~9,還是0ah~0fh ?

jbe htoend ;是0~9,轉移

add al,7 ;是0ah~0fh,加上7

htoend: ret ;子程式返回

htoasc endp

ends

end start6將資料塊dat1中的多個8位有符號數,資料塊以0結尾(資料塊不包括0),按照從小到大的順序排列

data segment

dat1 db 37h,18h,72h,0e6h,34h,0c5h,0a9h,45h,82h,19h,00h

ends

stack segment

dw 128 dup(0)

ends

code segment

start:

mov ax, data

mov ds, ax

mov es, ax

mov si,offset dat1

mov cx,0

mov dx,0

jishu: ;由於編譯器無法識別length

lodsb ;這裡先計算資料塊長度

cmp al,00h

je bijiao

inc cx

jmp jishu

bijiao: ;冒泡法排序_by liushuo

dec cx

mov dx,cx

lop1:

mov si,offset dat1

lop2: ;內迴圈

mov al,[si]

mov ah,[si+1]

inc si

cmp al,ah

jle do

mov [si-1],ah

mov [si],al

do:loop lop2

mov cx,dx

dec dx

wan:

loop lop1

ends

end start7記憶體單元x中有乙個8位有符號數,按下式計算y值,並將y值存於其後的單元(注意資料的大小data segment

x db 12

y db 00h

ends

stack segment

dw 128 dup(0)

ends

code segment

start:

mov ax, data

mov ds, ax

mov es, ax

mov si,offset x

mov di,offset y

mov bl,2

mov bh,5

mov al,[si]

cmp al,00h

jg da

cmp al,00h

jl xiao

mov ah,00h

mov [di],ah

jmp en

da:imul bh

sub al,30

mov [di],al

jmp en

xiao:

imul bl

add al,25

mov [di],al

jmp en

enends

end start8陣列buf1中有10個bcd碼,求出其累加和及平均值,分別存在變數sum和**er中data segment

buf1 db 12h,38h,44h,81h,57h,49h,23h,38h,11h,92h

sum dw 0

**er dw 0

ends

stack segment

dw 128 dup(0)

ends

code segment

start:

mov ax, data

mov ds, ax

mov es, ax

mov si,offset buf1

mov di,offset sum

mov ax,0

mov cx,10

mov al,[di]

lop1:

mov bl,[si]

inc si

add al,bl

daajnc lop2

inc ah

lop2:

loop lop1

mov [di],ax

shr ax,4

mov di,offset **er

mov [di],ax

ends

end start9資料塊x中有8個8位無符號數,分別為記為x1、x2、….. x8,試計算y=x1+x2+x3-x4-x5+x6-x7+x8的值,並存在記憶體中

data segment

dat db 2,5,3,2,5,6,7,4

y db 00h,00h

ends

stack segment

dw 128 dup(0)

ends

code segment

start:

mov ax, data

mov ds, ax

mov es, ax

mov si,offset dat

mov di,offset y

mov al,[si]

add al,[si+1]

adc al,[si+2]

sub al,[si+3]

sbb al,[si+4]

add al,[si+5]

sub al,[si+6]

add al,[si+7]

mov [di],al

ends

end start

10利用呼叫子程式的方法,將不大於9999的乙個16位二進位制數轉換成十進位制數,以組合bcd碼的形式存在2個記憶體單元中

data segment

dat dw 3587

res db 00h,00h

ends

stack segment

dw 128 dup(0)

ends

code segment

start:

main proc near

mov ax, data

mov ds, ax

mov es, ax

mov si,offset dat

mov di,offset res

mov ax,[si]

call htobcd

mov [di],cl

mov [di+1],ch

hltmain endp

htobcd proc near ;轉換子程式

push bx ;傳入引數ax中儲存16位二制數

push cx ;傳出引數ax中儲存轉換後的組合bcd碼

push dx

mov dx,0

mov bx,1000

cmp ax,bx

jge qian

lop1:

mov bx,100

mov dx,0

cmp ax,bx

jge bai

lop2:

mov bx,10

mov dx,0

cmp ax,bx

jge shi

lop3:

shl cl,4

and al,0fh

or cl ,al

jmp done

qian:

idiv bx

mov ch,al

mov ax,dx

jmp lop1

bai:

idiv bx

shl ch,4

and al,0fh

or ch ,al

mov ax,dx

jmp lop2

shi:

idiv bx

mov cl,al

mov ax,dx

jmp lop3

done:

mov ax,cx

pop dx

pop cx

pop bx

rethtobcd endp

ends

end start

匯程式設計序小例項

mov ah,01h系統呼叫輸入乙個字元用於功能選擇 int 21h字元預設輸入到al中 endm 巨集定義字元輸出 charout macro outchar巨集定義將字元outchar輸出 push ax push dx mov dl,outchar mov ah,02h系統呼叫輸出字元outc...

實驗匯程式設計序除錯和簡單介面程式設計

實驗報告 課程名稱微機介面與組合語言 實驗專案實驗一 匯程式設計序除錯和簡單介面程式設計 實驗儀器 tpc usb通用微機介面實驗系統 系別 計算機學院 專業網路工程 班級 學號 網工1班 2011011303 學生姓名 靳曉穎 實驗日期 2013 11 19 成績指導教師 王欣 一 實驗目的 1....

崗位職責及許可權匯程式設計序

1.0 目的 明確公司各部門和崗位的設定,並規定各部門和崗位的職責和許可權。2.0 適用範圍 適用於公司所有崗位的管理。4.0 職責與許可權 4.1總經理負責建立與質量管理體系相適應的組織結構,明確其職責 許可權及相互關係,任免部門經理或負責人。5.0 程式內容 5.3 崗位設定及能力要求 詳細要求...