汇编语言(第四版)王爽第七章--实验6

实验六

1. 实践7.3节内容(p139页)

assume cs:code,ds:data
data segment
    db 'unIX'    ;以字符串形式给出数据,编译器转换成与其相应的ASCII码
    db 'foRX'
data ends

code segment
start: 
    mov al,'a'   ;将‘a’的ASCII码赋值给al
    mov bl,'b'

    mov ax,4c00h
    int 21h
code ends
end start

编译、连接过程的界面图

用Debug查看data段中的内容

2. 实践7.4节内容(p140页)

“大小写转换问题”程序

assume cs:codesg,ds:datasg
datasg segment
    db 'BaSiC'
    db 'iNFOrMaTiOn'
datasg ends

codesg segment
start:
    mov ax,datasg
    mov ds,ax        ;ds指向代码段
    mov bx,0        ;(bx)=0,ds:bx指向'BaSiC'的第一个字符‘B’
    mov cx,5        ;五个字符循环5次
      s:mov al,[bx]        ;将所指向的字符的ASCII码取出到al中
          and al,11011111B    ;根据大小写变换规律,将ASCII码的第5位置变为0,字母一定为大写
    mov [bx],al        ;将变换后的ASCII码写回原内存单元
    inc bx            ;ds:bx指向下一个字母
    loop s

    mov bx,5        ;(bx)=5,ds:bx指向'iNFOrMaTiOn'的第一个字符‘i’
    mov cx,11        ;11个字符循环11次
     s0:mov al,[bx]
         or al,00100000B        ;根据大小写变换规律,将ASCII码的第5位置变为1,字母一定为小写
    mov [bx],al
    inc bx
    loop s0

    mov ax,4c00h
    int 21h
codesg ends
end start

用Debug查看data段中的内容,分析大小转换前后的变化

data段中转换前内容的界面图

data段中转换后内容的界面图

3. 实践7.5节内容(p143页)

用Debug的A命令写入问题7.1中汇编指令(p144页)

Debug查看并分析程序执行后ax、bx、cx中的内容

4. 实践7.6节内容(p144页)

用[bx+idata]方法编写程序

assume cs:codesg,ds:datasg
datasg segment
    db 'BaSiC'
    db 'MinIX'
datasg ends

codesg segment
start:
    mov ax,datasg
    mov ds,ax
    mov bx,0
    mov cx,5
      s:mov al,[bx]        ;ds:bx定位到'BaSiC'第一个字符
          and al,11011111b
    mov [bx],al
    mov al,[5+bx]        ;采用相对寻址方式定位到'MinIX'第一个字符
    or al,00100000b
    mov [5+bx],al
    inc bx
    loop s

    mov ax,4c00h
    int 21h
codesg ends
end start

用Debug查看data段中的内容,分析大小转换前后的变化

查看data段中转换前内容的界面图

查看data段中转换后内容的界面图

汇编语言(第四版)王爽第七章--实验6_第1张图片

5. 实践7.7节内容(p147~p149页)

(1)利用si和di编写“问题7.2”的程序

Debug中查看的结果界面

(2)利用[si或di+idata]编写“问题7.3”的程序

Debug中查看的结果

6. 实践7.8节内容(p149~p150页)

用Debug的A命令写入问题7.4中汇编指令

用Debug查看并分析程序执行后ax、cx中的内容

7. 实践7.9节内容(p150~p151页)

用Debug的A命令写入问题7.5中汇编指令

用Debug查看并分析程序执行后ax、bx、cx中的内容

汇编语言(第四版)王爽第七章--实验6_第2张图片

8. 实践7.10节内容(p152~p160页)

编写“问题7.6”的程序

Debug中查看的结果界面

编写“问题7.7”的程序

assume cs:codesg,ds:datasg
datasg segment
    db 'ibm             '
    db 'dec             '
    db 'dos             '
    db 'vax             '
    
datasg ends

codesg segment
start:
    mov ax,datasg
    mov ds,ax
    mov bx,0
                ;将4个有16个字符的字符串当成一个4行16列的二维数组
    mov cx,4        ;有4行,循环4次     
     s0:
    mov si,0        ;s0,外循环,每行的循环
         mov cx,3        ;有3列,循环3次
                ;s,内循环,每列的循环
      s:mov al,[bx+si]        ;定位到ds:[bx+si]的位置
          and al,11011111b    ;将第5位置0变成大写字母
    mov [bx+si],al        ;将变换完成的字母存回内存单元中
    inc si            ;指向下一列
    loop s

    add bx,16        ;偏移地址指向下一行
    loop s0

    mov ax,4c00h
    int 21h
codesg ends
end start    

Debug中查看的结果

汇编语言(第四版)王爽第七章--实验6_第3张图片

编写“问题7.8”的程序

assume cs:codesg,ds:datasg
datasg segment
    db 'ibm             '
    db 'dec             '
    db 'dos             '
    db 'vas             '
    dw 0            ;定义一个字暂存cx
    
datasg ends

codesg segment                       
start:
    mov ax,datasg
    mov ds,ax
    mov bx,0
                ;将4个有16个字符的字符串当成一个4行16列的二维数组
    mov cx,4        ;有4行,循环4次     
     s0:mov ds:[40h],cx        ;将cx中外层循环的次数保存在datasg:40h内存单元中
    mov si,0        ;每一列的偏移地址

         mov cx,3        ;有3列,循环3次
      s:mov al,[bx+si]        ;定位到ds:[bx+si]的位置
          and al,11011111b    ;将第5位置0变成大写字母
    mov [bx+si],al        ;将变换完成的字母存回内存单元中
    inc si            ;指向下一列
    loop s

    add bx,16        ;偏移地址指向下一行
    mov cx,ds:[40h]        ;将存在内存单元中的循环次数恢复cx
    loop s0

    mov ax,4c00h
    int 21h
codesg ends
end start    

Debug中查看的结果

编写“问题7.9”的程序

assume cs:codesg,ss:stack,ds:datasg
datasg segment
    db '1. display      '
    db '2. brows        '
    db '3. replace      '
    db '4. modify       '
datasg ends

stack segment
    dw 0,0,0,0,0,0,0,0
stack ends

codesg segment            
start:
    mov ax,datasg
    mov ds,ax
    mov di,0
    mov ax,stack
    mov ss,ax
    mov sp,10h
    mov bx,0
    
    mov cx,4
     s0:push cx            ;将外层的循环次数压入栈暂存在栈中
    mov si,0        ;用si定位要修改的列

    mov cx,4        ;改变每列的前四个单词,循环次数4次
      s:mov al,[bx+si+3]    ;每行第一个字母从第四个开始,常量3定位到每行要修改的起止地址
    and al,11011111b
    mov [bx+si+3],al
    inc si            ;定位到要修改的下一个字符
    loop s

    add bx,16        ;变换到下一行
    pop cx            ;从栈顶弹出原cx的值,恢复cx
    loop s0

    mov ax,4c00h
    int 21h
codesg ends
end start

Debug中查看的结果

你可能感兴趣的:(#,汇编语言,汇编)