汇编语言(王爽第三版)实验6实践课程中的程序
(2017-04-21 16:58:08)
标签:
汇编王爽it教育 |
分类: 汇编语言(王爽第三版)实验 |
实验6 实践课程中的程序
(1)将课程中所有讲解过的程序上机测试,用debug跟踪其执行过程,并在过程中理解所讲内容。
assume cs:code
data segment
db '1. file '
db '2. edit '
db '3. search '
db '4. view '
db '5. options '
db '6. help ' data ends
code segment
程序分析:
assume cs:code
data segment
db '1. file '
db '2. edit '
db '3. search '
db '4. view '
db '5. options '
db '6. help ' data ends
code segment
start:
mov ax, data
mov ds, ax
将ds:bx指向data第一个单元 mov bx, 0 ;
需要修改6次 mov cx, 6 ;
使用[bx+idata]寻址方式,并送入al(单字节) s: mov al, [bx+3] ;
转换为大写字母 and al, 11011111b ;
回写内存 mov [bx+3], al ;
个字符串长度一致,都是16字节,增量为16 add bx, 16 ;6
loop s
mov ax, 4c00H
int 21H code ends
end start
assume cs:code
data segment
ibm db ' '
dec db ' '
dos db ' '
vax db ' ' data ends
assume cs:code
data segment
db 'ibm '
db 'dec '
db 'dos '
db 'vax ' data ends
code segment
start:
mov ax, data
mov ds, ax
作为基本偏址变量 mov bx, 0 ;bx
需要外循环4次,修改4个字符串 mov cx, 4 ;
将外层循环计数器cx保存到dx中 s0: mov dx, cx ;
作为每个字符串的偏址 mov si, 0 ;si
内存循环s1,需要循环3次 mov cx, 3 ;
使用[bx+si]寻址方式,并送入al(单字节) s1: mov al, [bx+si] ;
转换为大写字母 and al, 11011111b ;
回写内存 mov [bx+si], al ;
inc si
loop s1
个字符串长度一致,都是16字节,增量为16 add bx, 16 ;6
将外层循环计数器cx从dx中恢复 mov cx, dx ;
loop s0
mov ax, 4c00H
int 21H code ends
end start
assume cs:code
data segment
db 'ibm '
db 'dec '
db 'dos '
db 'vax '
定义一个字,用于暂存cx值 dw 0 ; data ends
code segment
start:
mov ax, data
mov ds, ax
作为基本偏址变量 mov bx, 0 ;bx
需要外循环4次,修改4个字符串 mov cx, 4 ;
将外层循环计数器cx保存到data内存中 s0: mov ds:[40H], cx ;
作为每个字符串的偏址 mov si, 0 ;si
内存循环s1,需要循环3次 mov cx, 3 ;
使用[bx+si]寻址方式,并送入al(单字节) s1: mov al, [bx+si] ;
转换为大写字母 and al, 11011111b ;
回写内存 mov [bx+si], al ;
inc si
loop s1
个字符串长度一致,都是16字节,增量为16 add bx, 16 ;6
将外层循环计数器cx从data内存中恢复 mov cx, ds:[40H] ;
loop s0
mov ax, 4c00H
int 21H code ends
end start
assume cs:code
data segment
db 'ibm '
db 'dec '
db 'dos '
db 'vax ' data ends
stack segment
人工定义一个栈段,空间16个字节,初始化为0 db 16 dup (0) ; stack ends
code segment
start:
mov ax, data
mov ds, ax
作为基本偏址变量 mov bx, 0 ;bx
需要外循环4次,修改4个字符串 mov cx, 4 ;
mov ax, stack
人工创建一个栈结构 mov ss, ax ;
将ss:sp指向栈顶 mov sp, 16 ;
将外层循环计数器cx保存到stack栈中 s0: push cx ;
作为每个字符串的偏址 mov si, 0 ;si
内存循环s1,需要循环3次 mov cx, 3 ;
使用[bx+si]寻址方式,并送入al(单字节) s1: mov al, [bx+si] ;
转换为大写字母 and al, 11011111b ;
回写内存 mov [bx+si], al ;
inc si
loop s1
个字符串长度一致,都是16字节,增量为16 add bx, 16 ;6
将外层循环计数器cx从stack栈中恢复 pop cx ;
loop s0
mov ax, 4c00H
int 21H code ends
end start
(2)编程完成7.9问题中的程序
问题 7.9编程将data段中每个单词的前4个字母改为大写字母。
assume cs:code
data segment
db '1. display '
db '2. brows '
db '3. replace '
db '4. modify ' data ends
stack segment
人工定义一个栈段,空间16个字节,初始化为0 db 16 dup (0) ; stack ends
assume cs:code
data segment
db '1. display '
db '2. brows '
db '3. replace '
db '4. modify ' data ends
stack segment
人工定义一个栈段,空间16个字节,初始化为0 db 16 dup (0) ; stack ends
code segment
start:
mov ax, data
mov ds, ax
作为基本偏址变量 mov bx, 0 ;bx
mov ax, stack
人工创建一个栈结构 mov ss, ax ;
将ss:sp指向栈顶 mov sp, 16 ;
需要外循环4次,修改4个字符串 mov cx, 4 ;
将外层循环计数器cx保存到stack栈中 s0: push cx ;
作为每个字符串的偏址 mov si, 0 ;si
内存循环s1,需要循环4次 mov cx, 4 ;
使用[bx+si+3]寻址方式,并送入al(单字节) s1: mov al, [bx+si+3] ;
转换为大写字母 and al, 11011111b ;
回写内存 mov [bx+si+3], al ;
inc si
loop s1
个字符串长度一致,都是16字节,增量为16 add bx, 16 ;4
将外层循环计数器cx从stack栈中恢复 pop cx ;
loop s0
mov ax, 4c00H
int 21H code ends
end start
-d ds:0
0B65:0000
0B65:0010
0B65:0020
0B65:0030