1. 程式人生 > 其它 >JAXBContext版本衝突java.lang.TypeNotPresentException: Type javax.xml.bind.JAXBContext not present at

JAXBContext版本衝突java.lang.TypeNotPresentException: Type javax.xml.bind.JAXBContext not present at

一、實驗結論

實驗過程中使用到的碟符註明為v。

實驗一:

實驗任務(1):教材「實驗9 根據材料程式設計」(P187-189) 程式設計:在螢幕中間分別顯示綠色、綠底紅色、白底藍色的字串'welcome to masm!'。

assume cs:code,ds:data
data segment
    db 'Welcome to masm!'
    db 02h,24h,71h
data ends
code segment
start:
    mov bx,0b800h
    mov es,bx
    mov bx,data
    mov ds,bx
    mov cx,16
    mov di,
0 mov si,1824 s1:mov bx,ds:[16] mov es:[si],al add di,1 mov bx,ds:[di] mov es:[si],al add si,1 add si,1 loop s1 mov cx,16 mov si,1984 mov di,0 s2: mov bx,ds:[17] mov es:[si],al add di,1 mov bx,ds:[di] mov es:[si],al add si,1 add si,
1 loop s2 mov cx,16 mov si,2144 mov di,0 s3:mov bx,ds:[18] mov es:[si],al add di,1 mov bx,ds:[di] mov es:[si],al add si,1 add si,1 loop s3 mov ah,4ch int 21h code ends end start

編譯連線

執行

實驗任務(2):編寫子程式printStr,實現以指定顏色在螢幕上輸出字串。呼叫它,完成字串輸出。錄入編譯源程式task2.asm

assume cs:code, ds:data
data segment
    str db 'try', 0
data ends

code segment
start:  
    mov ax, data
    mov ds, ax

    mov si, offset str
    mov al, 2
    call printStr

    mov ah, 4ch
    int 21h

printStr:
    push bx
    push cx
    push si
    push di

    mov bx, 0b800H
    mov es, bx
    mov di, 0
s:    mov cl, [si]
    mov ch, 0
    jcxz over
    mov ch, al
    mov es:[di], cx
    inc si
    add di, 2
    jmp s

over:    pop di
    pop si
    pop cx
    pop bx
    ret

code ends
end start

編譯連線

執行結果

對源程式做如下修改:

把line3改為:

str db 'another try', 0

把line12改為:

mov al, 4

再次彙編、執行程式,觀察執行結果。

基於執行結果,理解原始碼,以及,組合使用轉移指令call和ret實現子程式的原理與方法。具體地,在line18-40中:

line19-22, line36-39,這組對稱使用的push、pop,這樣用的目的是什麼?

用棧儲存子程式執行之前的暫存器,子程式執行結束後,讓程式能夠繼續執行。這樣的保護恢復能更好利用暫存器。

line30的功能是什麼?

將cx暫存器中的字元顏色和字型轉移到es暫存器和di暫存器指示的視訊記憶體地址中。

實驗任務(3):使用任意文字編輯器,錄入彙編程式task3.asm

assume cs:code, ds:data
data segment
        x dw 1984
        str db 16 dup(0)
data ends

code segment
start:  
        mov ax, data
        mov ds, ax
        mov ax, x
        mov di, offset str
        call num2str

        mov ah, 4ch
        int 21h

num2str:
        push ax
        push bx
        push cx
        push dx
        
        mov cx, 0
        mov bl, 10
s1:      
        div bl
        inc cx
        mov dl, ah
        push dx
        mov ah, 0
        cmp al, 0
        jne s1
s2:        
        pop dx
        or dl, 30h
        mov [di], dl
        inc di
        loop s2
        
        pop dx
        pop cx
        pop bx
        pop ax

        ret
code ends
end start

編譯連線

執行debug

使用-u命令進行反彙編

使用-g命令執行到程式的退出之前,也就是line15之前

使用-d命令檢視記憶體內容

轉換後的數字字串1984成功被放入了str標號之後的記憶體單元

修改後重新彙編連線

assume cs:code, ds:data
data segment
        x dw 1984
        str db 16 dup(0)
data ends

code segment
start:  
        mov ax, data
        mov ds, ax
        mov ax, x
        mov di, offset str
        call num2str

        mov si, offset str
        mov al, 2
        call printStr

        mov ah, 4ch
        int 21h

num2str:
        push ax
        push bx
        push cx
        push dx
        
        mov cx, 0
        mov bl, 10
s1:      
        div bl
        inc cx
        mov dl, ah
        push dx
        mov ah, 0
        cmp al, 0
        jne s1
s2:        
        pop dx
        or dl, 30h
        mov [di], dl
        inc di
        loop s2
        
        pop dx
        pop cx
        pop bx
        pop ax

        ret

printStr:
    push bx
    push cx
    push si
    push di

    mov bx, 0b800H
    mov es, bx
    mov di, 0
s:      mov cl, [si]
    mov ch, 0
    jcxz over
    mov ch, al
    mov es:[di], cx
    inc si
    add di, 2
    jmp s

over:   pop di
    pop si
    pop cx
    pop bx
    ret

code ends
end start

執行結果

更改line3中整數為任意數值更改為2077

實驗任務(4):使用任意文字編輯器,錄入彙編源程式task4.asm。

assume cs:code, ds:data
data segment
        str db 80 dup(?)
data ends

code segment
start:  
        mov ax, data
        mov ds, ax
        mov si, 0

s1:        
        mov ah, 1
        int 21h
        mov [si], al
        cmp al, '#'
        je next
        inc si
        jmp s1
next:
        mov cx, si
        mov si, 0
s2:     mov ah, 2
        mov dl, [si]
        int 21h
        inc si
        loop s2

        mov ah, 4ch
        int 21h
code ends
end start

編譯連線

執行功能是把輸入的以#結尾的字串再列印一遍

結合執行結果,理解程式功能,瞭解軟中斷指令。具體地:

line12-19實現的功能是?

功能是迴圈讀入字串,在輸入檢測到#的時候跳出執行子程式,向next段執行   

line21-27實現的功能是?

將複製的資料段輸出到螢幕對應記憶體上

實驗任務(5):在visual studio整合環境中,編寫一個簡單的包含有函式呼叫的c程式。程式碼如下:

#include<stdio.h>
int sum(int,int);

int main(){
    int a = 2, b = 7 , c;
    
    c = sum(a,b);

    return 0;
}

int sum(int x, int y){
    return (x + y);
}

在line7, line13分別設定斷點,在除錯模式下,檢視反彙編程式碼。

設定斷點:

反彙編

--- c:\users\red\documents\visual studio 2012\projects\project1\project1\源.cpp -
#include<stdio.h>
int sum(int,int);

int main(){
009C1410  push        ebp  
009C1411  mov         ebp,esp  
009C1413  sub         esp,0E4h  
009C1419  push        ebx  
009C141A  push        esi  
009C141B  push        edi  
009C141C  lea         edi,[ebp-0E4h]  
009C1422  mov         ecx,39h  
009C1427  mov         eax,0CCCCCCCCh  
009C142C  rep stos    dword ptr es:[edi]  
    int a = 2, b = 7 , c;
009C142E  mov         dword ptr [a],2  
009C1435  mov         dword ptr [b],7  
    
    c = sum(a,b);
009C143C  mov         eax,dword ptr [b]  
009C143F  push        eax  
009C1440  mov         ecx,dword ptr [a]  
009C1443  push        ecx  
009C1444  call        sum (09C105Fh)  
009C1449  add         esp,8  
009C144C  mov         dword ptr [c],eax  

    return 0;
009C144F  xor         eax,eax  
}
009C1451  pop         edi  
}
009C1452  pop         esi  
009C1453  pop         ebx  
009C1454  add         esp,0E4h  
009C145A  cmp         ebp,esp  
009C145C  call        __RTC_CheckEsp (09C113Bh)  
009C1461  mov         esp,ebp  
009C1463  pop         ebp  
009C1464  ret  

分析反彙編程式碼,從彙編的角度,觀察高階語言中引數傳遞和返回值是通過什麼實現的,以及,引數入棧順序,返回值的帶回方式,等等:

原理:高階語言中的形參列表是從右往左進行壓棧的,接下來利用call函式呼叫子程式。當進行函式呼叫的時候,引數從右到左進入暫存器,call命令呼叫返回函式內部。進行運算後返回,暫存器的運算值回到儲存值得暫存器中完成了一次完整的函式執行。

二、實驗總結:

1、學習瞭如何在螢幕不同位置顯示字元。

2、瞭解學習了跳轉指令

3、在高階語言反彙編學習中,初步瞭解了彙編連線的原理。