IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)解析 联系客服

发布时间 : 星期五 文章IBM-PC汇编语言程序设计(第二版)课后习题答案(清华大学出版社)解析更新完毕开始阅读2c291f90ab00b52acfc789eb172ded630a1c986f

mov ah,9h int 21h call crlf pop ax ret INFO ENDP

;回車換行的過程 CRLF PROC NEAR push ax push dx mov dl,0dh mov ah,2h int 21h mov dl,0ah mov ah,2h int 21h pop dx pop ax ret CRLF ENDP ;輸入的過程

INPUT PROC NEAR mov ah,1 int 21h ret INPUT ENDP

;檢查是否非數字字符的過程~ CHECK PROC NEAR push dx

cmp al,30h ;如果鍵入的字符ASCII值小於0的ASCII值30H, jb WRONG ;剛轉入WRONG,作錯誤處理

cmp al,39h ;如果鍵入的字符ASCII值大於9的ASCII值39H, ja WRONG ;則轉入WRONG,作錯誤處理 mov cl,al ;把合法的數字ASCII值放入CL中 jmp next

;錯誤處理過程,提示,並等待用戶鍵入新值 WRONG:

mov dx,offset info2 call info call input call check next:

pop dx ret

CHECK ENDP

;根據用戶鍵入的數字,響鈴相應的次數 BELL PROC NEAR push dx

sub cl,30h ;鍵入數字的ASCII值減去30,才能成為次數 mov dl,7h mov ah,2 re:

int 21h dec cx jnz re pop dx ret BELL ENDP CODE ENDS END START 6.程序實現。(末经调试) .model small .data

m db dup (20個數)

n db 20,0,20 dup (?) ;用于存放负数的最大容量为20的数组 p db 20,0,20 dup (?) ;同上,用于存放正数 .code

main proc far start:

mov ax,@data mov ds,ax

call check_store ;判斷數的正負並存入相應數組 call display ;在屏幕上顯示 main endp

check_store proc near push ax push bx push cx

mov cx,20 ;循環次數放入CX cld ;使SI向增加的方向移動 lea si,m ;M的偏移地址放入SI again:

mov al,[si] ;M中的數依次放入AL中 cmp al,0 ;並且依次和0比較

jl store_in_n ;如果小於0,則存入負數組 jg store_in_p ;如果大於0,剛存入正數組 dec cx

jnz again jz exit store_in_n : push bx

mov bl,n[1] ;N中已有數的個數放入BL中,

mov n[bl+1],al ;把AL中負數存入數組N的最後一個數字的下一字節 pop bx jmp again

store_in_p STORE—IN—P push bx

mov bl,p[1] mov p[bl+1],al pop bx jmp again exit:

pop cx pop bx pop ax ret check_store endp display proc near push cx lea si,n[2]

mov cl,n[1] ;數組N中數的個數放入CL cld

mov ah 2

re_display_n: ;依次顯示各個負數 mov dl,[si] int 21h

mov dl,20h ;各個數之間用空格間隔 int 21h dec cl

jnz re_display_n ;下面四行用來回車和換行 mov dl,0dh int 21h mov dl,0ah int 21h ;同上面負數的顯示, lea si,p[2] mov ch,p[1] cld re_display_p:

mov dl,[si] int 21h mov dl,20h int 21h dec ch

jnz re_display_p pop cx ret display endp end start 7.程序實現。(未調試) .model small .data

data db 100d dup (100個數). .code start:

mov ax,@data mov ds,ax

mov cx,101d ;循環次數

mov bl,0feh ;初始化BX為最大的八位無符號正數 mov si,offset data cld again:

dec cx

jz finish ;全部判斷完成 mov al,[si] cbw

div 2 ;每個數除以2

cmp al,0 ;佘數不為0的,不是偶數 jne again

cmp bl,[si] ;每次比較, jl again ;較小的數,

mov bl,[si] ;代替BX中原來的數 jmp again finish:

mov ax,0

mov al,bl ;把最小偶數放到AX中 end start 8.程序實現。(未調試) .model samll .code start:

mov ch,9 ;比較次數放入CH

mov cl,2 ;每次AX循左移的次數放入CL