一、代碼實現
1 ;目的:處理數據段中的數據,將每一行的小寫字母大寫 2 ;編寫:Tony 3 ;語言:asm 4 ;時間:2020.3.24 5 6 7 8 ;定義代碼段、數據段、棧段 9 assume cs:code,ds:data,ss:stacksg 10 11 ;數據段 12 data segment 13 db 'ibm.............' 14 db 'aoc.............' 15 db 'ios.............' 16 db 'asm.............' 17 data ends 18 19 ;棧段 20 stacksg segment 21 dw 0,0,0,0,0,0,0,0 ;初始化8個字數據單元(不要把數據放在單引號內) 22 stacksg ends 23 24 ;代碼段 25 code segment 26 27 start: mov ax,stacksg ;棧段地址送ax 28 mov ss,ax ;ax中的數據送棧寄存器 29 mov sp,10h ;設置棧底的位置 30 31 mov ax,data ;數據段地址送ax 32 mov ds,ax ;ax中的數據送數據段寄存器 33 34 mov bx,0 ;初始化數據段中的偏移地址 35 mov cx,4 ;初始化外層循環次數 36 37 s: push cx ;保存外層循環數據到棧中 38 mov si,0 ;初始化數據段中的偏移地址 39 mov cx,3 ;初始化內層循環次數 40 s1: mov al,[bx+si] ;將ds:[bx+si]中的數據送al 41 and al,11011111b ;將al中的第5位置0,將字母大寫 42 mov [bx+si],al ;將字母大寫后寫回內存單元 43 inc si ;偏移地址自增1 44 loop s1 ;循環處理將字母大寫 45 46 add bx,10h ;修改段數據中行偏移地址 47 pop cx ;出棧恢復cx的數據 48 loop s ;循環處理段數據中的4段數據 49 50 mov ax,4c00h 51 int 21h 52 code ends 53 end start
二、上機調試
0)話不多說,進入虛擬機的xp系統,打開cmd命令窗口,准備開擼……查看內存中的匯編代碼
1)在調試之前查看一下各個寄存器的數據
2)用t指令開始單步調試代碼,執行第一條指令 MOV AX,0B3C,看寄存的變化
棧段地址0B3C送賦值給寄存器ax
3)繼續執行下一條指令
將棧段地址送棧段寄存器ss
4)在執行完mov ds,ax后,查看初始化后數據段中的數據
5)略過……,直接來到第一次外循環處
cx壓入棧,保存cx數據到棧中
6)第一次內循環開始處
7)第一次內循環結束處
8)查看數據段中的數據
可以看出第一段數據的小寫字母已經大寫了,嗯……成功了一小步
9)來到第二次外循環處
最明顯的就是數據段的偏移地址BX=0X0010,此時就開始准備轉換第二組數據'aoc'
10)第二次內循環開始處
11)第二次內循環結束處
12)查看數據段中的數據
可以看出第二段數據的小寫字母已經大寫了……開心啊
13)略過……直接執行完成后數據段中的數據
嗯哼,成功啦,全部變成大寫字母了……
14)程序正常結束
15)返回cmd