第二次的彙編作業

2021-03-31 08:56:31 字數 2584 閱讀 1766

由鍵盤輸入一串整數(length <= 9),將該串轉換為整數,並分別按16進製制和10進製輸出。

整數的長度為9,這樣就超過了16位,單純用8086的運算已經不能滿足,加法的進製就會丟失,

而乘除法很可能會出現overflow.

所以要用到32位暫存器,這樣就用到386指令.

如果不用386指令,也可以用兩個暫存器對高16位和低16位分別進行操作.

下面是用386指令的源**

enter   macro

mov   dl,0ah

mov   ah,2h

int   21h

mov   dl,0dh

mov   ah,2h

int   21h

endm

.model  hex

.386

.data

msg   db    'input numbers (length<=9):$'

.stack

db    100 dup(?)

.code

main   proc   far

;*********************************

start: 

push  ds

mov   ax,0

push  ax  

mov   ax,@data

mov   ds,ax  

mov   dx,offset msg

mov   ah,9

int   21h

call  rec

enter

call  tohex

enter

call  dec1

enter

ret  

main  endp

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

rec   proc   near        ;子程式rec是用來接收乙個長度小於9的整數

mov   ebx,0        ;並把它放入ebx中

newnum:

mov   ah,01

int   21h

sub   al,30h

jl   exit

cmp   al,9d

jg   exit

cbwxchg  eax,ebx

mov   ecx,10d

mul   ecx

xchg  eax,ebx

add   ebx,eax

jmp   newnum

exit:

retrec   endp

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

tohex  proc   near           ;子程式tohex是把ebx中的數用16進製輸出

mov   ch,8

rotate:

mov   cl,4

rol   ebx,cl

mov   al,bl

and   al,0fh

add   al,30h

cmp   al,3ah

jl   print

add   al,7h

print:

mov   dl,al

mov   ah,2h

int    21h

dec   ch

jnz   rotate

rettohex  endp

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

dec1  proc  near            ;dec1是轉化為十進位制輸出

mov   ecx,100000000d

call  todec

mov   ecx,10000000d

call  todec

mov   ecx,1000000d

call  todec

mov   ecx,100000d

call    todec

mov   ecx,10000d

call  todec

mov   ecx,1000d

call  todec

mov   ecx,100d

call  todec

mov   ecx,10d

call    todec

mov   ecx,1d

call  todec

ret   

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

todec  proc  near

mov   eax,ebx

mov   edx,0

div   ecx

mov   ebx,edx

mov   dx,ax

add   dl,30h

mov   ah,02h

int   21h

rettodec  endp

dec1  endp

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

end   main

第二次作業

execise02 1.查詢85年以後出生的學生姓名 性別和出生日期 2.列表顯示所有可能的學生選課組合 學號 課程號 3.查詢1 2 4班中陳姓同學的資訊 4.查詢所有及格的學生姓名 所選課程名及所得分數 5.統計各門課程的及格人數 課程編號 課程名 及格人數 6.統計各門課程的總人數 及格人數和...

第二次作業

第一題 p1 1 遞迴寫法,效率低 include 1.寫乙個函式返回引數值為1的個數 比如 15 0000 1111 4個1 程式原型 int count one bits unsigned int value int fuc int x else return 0 void mainp1 p1 ...

第二次作業

檔名稱 516.cpp 作 者 闕文榮 完成日期 2016 年 3 月 11 日 版 本 號 v1.1 對任務及求解方法的描述部分 用while語句控制輸出 輸入描述 略 問題描述 現在北京有一套房子,200萬,假設房價每年 10 乙個軟體工程師每年固定能賺40萬。他想買這套房子,多大的 率能夠忍受...