彙編 實驗六

2023-01-08 22:48:02 字數 3068 閱讀 9957

練習二;將乙個字單元中的二進位制數以十六進製制數形式顯示在螢幕上

● 乙個字單元有4個十六進製制數,要將這些十六進製制數按順序顯示,則需要用迴圈移位方法把所要顯示的4位二進位制數移動到最右面,既分離出每個4位,對分離出每個4位(一位十六進製制數)進行轉換

● 0——9的ascii為30h----39ha,a---f的ascii為41h---46h

程式**

data segment

buff dw 3c6dh

data ends

code segment

assume cs:code,ds:data

start:mov ax,data

mov ds,ax

lea si,buff

mov bx,[si] ;從記憶體單元取運算元 y

mov cx,0404h

a1: rol bx,cl ;迴圈右移

mov al,bl

and al,0fh ;分離要轉換的四位二進位制數 n

add al,30h

cmp al,3ah

jl a2 y

add al,7h ;字元為a—f,要加7,變成其ascii碼

a2: mov dl,al 顯示十六進製制數

mov ah,2

int 21h

dec ch

jnz a1

mov ah,4ch

int 21h

code ends

end start

習題3: 求1~100整數的和。

程式**:

stack segment stack

dw 128 dup(?)

stack ends

data segment

s db 4 dup(?)

data ends

code segment

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

start: mov ax,data

mov ds,ax

mov bx,1

mov ax,0

mov cx,100 ;計數100

next: add ax,bx

inc bx

loop next ; next完成從1加到100

mov dl,0 ; 計數,為千位的值

lp1: cmp ax,3e8h ; 判和大於1000否

jb lp2 ; no,轉lp2

inc dl ; yes, dl加1(計數有幾個1000)

sub ax,3e8h ;和中只要大於1000則減1000

jmp lp1 ; 返回lp1,再判剩餘的數是否大於1000

lp2: mov s+3,dl ; 儲存千位數

mov dl,0 ; dl清0,再計數,為百位的值

lp3: cmp ax,64h ; 判剩餘的數大於100否

jb lp4 ; no,轉lp4

inc dl ; yes, dl加1

sub ax,64h ; 每次判斷剩餘的數大於100則減100

jmp lp3 ; 返回lp3,再判剩餘的數是否大於100

lp4: mov s+2,dl ; 儲存百位數

mov dl,0 ; 計數,為十位的值

lp5: cmp ax,0ah ; 判剩餘的數大於10否

jb lp6 ; no,轉移

inc dl ; yes, dl加1

sub ax,0ah ; 每次判斷剩餘的數大於10則減10

jmp lp5 ; 返回lp5,再判剩餘的數是否大於10

lp6: mov s+1,dl ; 儲存十位數

mov s,al ; 儲存個位數

mov si,offset s+3 ; 將s+3的位址送si中

mov cx,4 ; 顯示4位計數

xs: mov dl,[si

add dl,30h

mov ah,2

int 21h

dec si

loop xs

mov ah,4ch

int 21h

code ends

end start

程式運算後,要將千,百,十,個位分離,分離的方法既:將和先判斷大於1000否,大於1000則減1000,並且用dl暫存器計數加1,直到剩餘的數小於1000為止,則dl的內容為千位數的值。

類似再求出百位、十位,最後剩餘的數則是個位。

千,百,十,個位分離後,分別放在s+3,s+2,s+1,s(以位元組為單位)單元中。

習題四。 字串變數string以**o結束,求這個字串長度。字串變數string中存放「a string for testing o」。

程式**:

data segment

string db 'a string for testing o'

leng db 0

data ends

code segment

assume cs:code,ds:data

start: mov ax,data

mov ds,ax

mov ax,0

mov dx,ax ;dx清零,用以存放統計字元個數

lea di,string ;變數的首位址(偏移量)送di

mov cx,100 ;迴圈次數100送cx中

mov al,'o'

lp: cmp al,[di]

je done ;若為「0」,既為結束標誌,轉done

inc dx ;不為「0」,(dx)+1

inc di

loop lp

done: mov leng,dl ;統計個數送變數leng中儲存

add dl,30h

mov ah,2

int 21h

mov ah,4ch

int 21h

code ends

end start

彙編實驗三

實驗學時 2 實驗地點 二綜實驗日期 2014 11 3 一 實驗目的 掌握彙編程式設計規範,熟悉程式設計環境。二 實驗內容 1 編寫子程式把字串中的小寫字母轉變為大寫字母 參見教材實驗11 2 編寫0號中斷處理程式,使得在除法溢位發生時在螢幕中間顯示 divide error 參見教材實驗12 請...

彙編實驗報告

組合語言與微機接 術實驗報告 一分支程式設計 二迴圈程式設計 學號 1120102118 姓名 馬婧婷 班級 08311001 完成日期 2013 04 18 實驗1.1 一實驗背景 1 實驗目的 掌握組織及除錯乙個簡單並完整的組合語言程式,熟悉組合語言上機過程。實驗的第乙個程式是分支設計程式。2 ...

彙編實驗報告

課程編號 b080103020 組合語言程式設計 實驗報告 東北大學軟體學院 實驗1 資料傳送指令 實驗目的 了解和掌握 mov push pop xchg四條指令的作用和在程式設計中的用法。實驗內容 採用立即數定址方式將19e0h,3f56h,0af37h,9a81h分別送給eax ebx ecx...