請分析這道8086組合語言程式,用8086組合語言編寫程式,接受從鍵盤上輸入的一個兩位十進位制數字,這個數經過BCD碼處理,以十六進位制顯示出

2021-08-14 23:04:52 字數 3356 閱讀 7169

1樓:匿名使用者

code segment ;段開始標誌assume cs:code ;用assume將cs與該code段關聯起來

start: ;程式入口標誌

mov al,0abh ;對將資料放入暫存器ax中,(ax)=0abh

mov cl,4 ;對將資料放入暫存器cx中,(cx)=4rol al,cl ;對al的8位資料進行向右的迴圈左移,一共移動4位(也就是cx的值)。所謂迴圈右移1位,就是將最低位的0或1放到最高位,其他位向右移動1位。這樣移動4位之後,al中的低四位資料就跑到高四位了,而高四位資料跑到低四位了。

mov ax,4c00h ;剩下兩句是用來終止程式用的int 21h

code ends ;段結束標誌

end start ;程式結束標誌

2樓:匿名使用者

好基礎啊, 好基礎.

code segment ;;**段開始

assume cs:code ;;**段地址

start:mov al,0abh ;;start是一個標籤, 取運算元0abh 放在暫存器al中

mov cl,4 ;;將4放在暫存器cl中

rol al,cl ;;將al中的數迴圈左移cl位(4位), 完成高低4位互換

mov ax,4c00h ;;4c00 -> ax

int 21h ;;呼叫中斷21h, 退出程式

code ends

end start

最終執行完...就是在cpu中換了下高低位, 什麼也沒有輸出. over.

3樓:

code segment ;;**段開始

assume cs:code ;;**段地址和cs段暫存器關聯

start:mov al,0abh ;;start是一個標籤, 將運算元0abh 放在暫存器al中

mov cl,4 ;;將4放在暫存器cl中

rol al,cl ;;將al中的數迴圈左移4位 左移的位數時根據cl的值來決定

mov ax,4c00h ;;21號中斷的4c號功能用於退出程式返回執行權給作業系統

int 21h ;;呼叫中斷21h, 退出程式 不寫這個你的程式執行後dos就會死住無法繼續操作

code ends

end start

4樓:匿名使用者

start: al=0xab

cl=4

al迴圈左移4位後al=0xba

ax=0x4c00

執行中斷21(程式 返回)

用8086組合語言編寫程式,接受從鍵盤上輸入的一個兩位十進位制數字,這個數經過bcd碼處理,以十六進位制顯示出

5樓:做而論道

;********************==

disp_str macro x ;巨集定義.

mov dx, offset x

mov ah, 9

int 21h

endm

;----------------------

data segment ;資料段.

msg1 db 13, 10, 'please input : $'

msg3 db 13, 10, 'the hex is : $'

x dw ? ;存放新輸入資料.

data ends

;----------------------

code segment ;**段.

assume cs: code, ds: data

start:

mov ax, data

mov ds, ax

;--------------------------------

in_loop:

disp_str msg1 ;巨集呼叫,提示 please input :

;--------------------------------

mov x, 0 ;資料清零.

_inx:

mov ah, 1 ;輸入字元.

int 21h

;--------------------------------

cmp al, 13 ;回車?

je _in_end ;是則結束輸入.

cmp al, '0'

jb in_loop ;小於'0',不是數字.

cmp al, '9'

ja in_loop ;大於'9',不是數字.

sub al, '0'

mov cl, al

mov ch, 0

mov ax, x

mov bx, 10 ;老資料乘以10

mul bx

add ax, cx ;加上新資料.

mov x, ax ;儲存.

cmp ax, 99

ja in_loop

jmp _inx

;--------------------------------

_in_end:

disp_str msg3 ;巨集呼叫,提示 the hex is :

mov ax, x

mov bx, 16

mov cx, 0

d_1:mov dx, 0

div bx

add dl, '0'

cmp dl, 3ah

jb zzz

add dl, 7

zzz:

push dx

inc cx

cmp ax, 0

jne d_1

mov ah, 2

d_2:pop dx

int 21h

loop d_2

;--------------------------------

mov ah, 4ch

int 21h

;--------------------------------

code ends

end start

;********************=

6樓:匿名使用者

學彙編,要用到哪些軟體

用組合語言編寫程式,用組合語言編寫一個程式。

那個 是可以,但是其實可以更簡單,小寫字母內碼範圍是61h 7ah 大寫字母內碼範圍是41h 5ah 那麼只要比較輸入的字元內碼是否在61h 7ah之間如果是,則將其減去20h,就是大寫字母了 print macro para 定義一個顯示字串的巨集 lea dx,para mov ah,9 int...

用組合語言編寫簡單程式,用組合語言編寫一個簡單程式

1.計算u x y z 100 w 其中 x,y,z,w均為十六位有符號數。程式如下 data segment x dw 10 16位變數 y dw 20 z dw 30 w dw 40 u dw data ends code segment assume cs code,ds data start...

彙編子程式的問題,組合語言子程式是如何定義的

這不是返回自己本身迴圈執行,而是跳轉到子程式的第一行迴圈而已,有什麼不可以的,迴圈結構,任何地方都可以的。但有一點,子程式不論迴圈多少次,最終必須執行一行返加指令ret,也就是子程式必須要有一條ret指令,你的子程式最後是缺少一行ret指令的,加上了就可以的。組合語言子程式是如何定義的?這樣定義的 ...