彙編語言 實驗11 編寫子程序 & 實驗12 編寫0號中斷的處理程序

實驗11 編寫子程序

編寫一個子程序,將包含任意字符,以0結尾的字符串中的小寫字母轉變成大寫字母,描述如下。

名稱:letterc
功能:將以0結尾的字符串中的小寫字母轉變成大寫字母
參數:ds:si指向字符串首地址

應用舉例:
  assume cs:codesg
  datasg segment
      db "Beginner's All-purpose Symbolic Instruction Code.",0
  datasg ends
  codesg segment
   begin: mov ax,datasg
          mov ds,ax
          mov si,0
          call letterc
          mov ax,4c00h
          int 21h
  letterc:    :
              :
  codesg ends
  end begin
  注意需要進行轉化的是字符串中的小寫字母a~z,而不是其他字符。

代碼如下:

assume cs:code
data segment
    db "Beginner's All-purpose Symbolic Instruction Code.",0
data ends

code segment

begin:
    mov ax,data
    mov ds,ax
    mov si,0
    call letterc

    mov ax,4c00h
    int 21h

;名稱:letterc
;功能:將以0結尾的字符串中的小寫字母轉變爲大寫字母
;參數:ds:si指向字符串首地址
letterc:
    push cx
    pushf
    mov cx,0
s1:
    mov cl,ds:[si]		;判斷是否爲0
    jcxz ok
    cmp cl,61h		;不在a-z範圍內則跳轉
    jb nextgo
    cmp cl,7ah
    ja nextgo
    and cl,0dfh		;小寫字母轉大寫
    mov ds:[si],cl
nextgo:
    inc si
    jmp short s1
ok:
    popf
    pop cx
    ret
code ends
end begin

運行結果:
在這裏插入圖片描述
在這裏插入圖片描述

在這裏插入圖片描述
在這裏插入圖片描述


實驗12 編寫0號中斷的處理程序

編寫0號中斷的處理程序,使得在除法溢出發生時,在屏幕中間顯示字符串“divide error”,然後返回到DOS。

編寫0號中斷處理程序如下:

assume cs:code

	
	code segment
		start: mov ax,cs
			   mov ds,ax
			   mov si,offset do0	;設置ds:si指向源地址
			   mov ax,0
			   mov es,ax
			   mov di,200h		;設置es:di指向目的地址
			   
			   mov cx,offset do0end-offset do0	;設置cx爲傳輸長度
			   cld	;傳輸方向設置爲正
			   rep movsb
			   
			   mov ax,0;設置中斷向量表
			   mov es,ax
			   mov word ptr es:[0*4],200h
			   mov word ptr es:[0*4+2],0
			   
			   mov ax,4c00h
			   int 21h
		
		do0:jmp short do0start
			db "divide error"
			   
			do0start:   
			   mov ax,cs
			   mov ds,ax
			   mov si,202h		;設置ds:si指向字符串
			   
			   mov ax,0b800h
			   mov es,ax
			   mov di,12*160+36*2		;設置es:di指向顯存空間的中間位置
			   
			   mov cx,12		;設置cx爲字符串長度
			s:		
			   mov al,[si]
			   mov es:[di],al
			   inc si
			   add di,1
			   mov al,02h	;設置顏色
			   mov es:[di],al
			   add di,1
			   loop s
			   
			   mov ax,4c00h
			   int 21h
			   
		do0end:nop
	code ends
end start   

編寫除法溢出程序如下

assume cs:code
	code segment
	start:
		mov ax,1000h
		mov bh,1
		div bh
	code ends
end start

運行結果
在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章