鱼C论坛

 找回密码
 立即注册
查看: 2342|回复: 7

[汇编作业] 实验6 实践课程中的程序

[复制链接]
发表于 2020-4-4 13:53:14 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
还不能发图,就发点比较重要的:
7.6大小写:
assume cs:codesg,ds:datasg
datasg segment
db 'BaSiC'
db 'MinIX';这两个在内存中挨着放:“BaSiCMinIX......”
datasg ends

codesg segment
start:        
        mov ax,datasg
        mov ds,ax
        mov bx,0
        mov cx,5
s1:
        mov al,[bx]
        and al,11011111b;将串中所有字符第6位置0以转化为大写
        mov [bx],al
        inc bx
        loop s1;正因为两个字符串挨着放所以不将bx置0
        mov cx,5
s2:
        mov al,[bx]
        or al,00100000b;将串中所有字符第6位置1以转化为小写
        mov [bx],al
        inc bx
        loop s2

        mov ax,4c00H
        int 21h
codesg ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-4-4 14:09:34 | 显示全部楼层
还可以写成:
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,0[bx]
        and al,11011111b
        mov [bx],al

        mov al,5[bx]
        or al,00100000b
        mov 5[bx],al
        inc bx
        loop s

        mov ax,4c00H
        int 21h
codesg ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-4 14:14:06 | 显示全部楼层
问题7.2
assume cs:codesg,ds:datasg
datasg segment
db 'welcome to masm!'
db '................';两个都有16个bytes
datasg ends

codesg segment
start:        
        mov ax,datasg
        mov ds,ax
        mov si,0
        mov di,16
        mov cx,8
s:
        mov ax,[si]
        mov [di],ax
        add si,2
        add di,2
        loop s

        mov ax,4c00H
        int 21h
codesg ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-4 14:21:23 | 显示全部楼层
问题7.3改进7.2使代码行数更少
assume cs:codesg,ds:datasg
datasg segment
db 'welcome to masm!'
db '................'
datasg ends

codesg segment
start:        
        mov ax,datasg
        mov ds,ax
        mov si,0
        mov cx,8
s:
        mov ax,[si]
        mov 16[si],ax;刚犯了个蠢,[si+di] 的写法是错的
        add si,2
        loop s

        mov ax,4c00H
        int 21h
codesg ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-4 14:34:54 | 显示全部楼层
问题7.6
assume cs:codesg,ds:datasg
datasg segment
db '1. file         '
db '2. edit         '
db '3. search       '  
db '4. view         '
db '5. options      '
db '6. help         '
datasg ends

codesg segment
start:        
        mov ax,datasg
        mov ds,ax
        mov bx,0
        mov cx,6
s:
        mov al,[bx+3];这里如果al写成ax就会把第5个字符置0也就是"."
        and al,11011111b
        mov 3[bx],al
        add bx,16
        loop s

        mov ax,4c00H
        int 21h
codesg ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-4 14:53:04 | 显示全部楼层
问题7.7和7.8
由于看过视频,上来就写出嵌套的正确形式
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
        mov cx,4
s:
        push cx
        mov si,0
        mov cx,3;由于push过cx了,结尾再pop cx回来,内部cx无论怎么改变都不影响外部循环
        s0:
                mov al,[bx+si]
                and al,11011111b
                mov [bx+si],al
                inc si
                loop s0
        add bx,16
        pop cx
        loop s

        mov ax,4c00H
        int 21h
codesg ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-4 14:56:07 | 显示全部楼层
流风逸雪 发表于 2020-4-4 14:53
问题7.7和7.8
由于看过视频,上来就写出嵌套的正确形式

开头忘记申明栈地址了,以后注意一下吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-4 15:19:54 | 显示全部楼层
问题7.9:
assume cs:codesg,ss:stacksg,ds:datasg;总之这里声明的东西下面都要写上
stacksg segment
dw 0,0,0,0,0,0,0,0;这里没写会报错
stacksg ends

datasg segment
db '1. display      '
db '2. brows        '
db '3. replace      '  
db '4. modify       '

datasg ends

codesg segment
start:        
        mov ax,stacksg
        mov ss,ax
        mov sp,16
        mov ax,datasg
        mov ds,ax

        mov bx,0
        mov cx,4
s:
        push cx
        mov si,0
        mov cx,4
        s0:
                mov al,[bx+3+si]
                and al,11011111b
                mov [bx+3+si],al
                inc si
                loop s0
        add bx,16
        pop cx
        loop s

        mov ax,4c00H
        int 21h
codesg ends
end start
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-7-1 09:52

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表