- [835984286] 就是结果没问题,不知道有没有潜在的错误 09/18 23:03
- [835984286] 下载个dosbox效果不错 谁给个dos系统的iso给我呀,我也想装个dos虚拟机 邮箱:835 09/18 22:57
- [tily] dos环境是怎样配置的, 我的博文里有详细说明 09/18 13:55
- [stqcw] 你的这个 dos环境是怎样配置的 我在xp里面装的是masm615 但老是有问题 按下A键不松开 09/18 13:34
- [stqcw] 你的这个 dos环境是怎样配置的 我在xp里面装的是masm615 但老是有问题 按下A键不松开 09/18 13:32
- [chinatree] 貌似没有什么问题呀? 09/15 11:54
- [835984286] 最好能把缓冲区(键盘)的a字符给删掉就好了】 09/15 03:27
- [835984286] 那你也在虚拟模式试试呀,看看能不能解决 09/14 01:39
- [chinatree] 你改过之后应该能看到,退出后可能会被系统改回来,我在虚拟机下可以,保护模式下没试过 09/13 19:47
- [chinatree] 你改过之后应该能看到,退出后可能会被系统改回来 09/13 19:47
[2011-09-08 21:32] 试验11,将其显示在屏幕上 哪里有错误希望好心人不吝指出
assume cs:code
date segment
db "Beginner's All-purpose Symbolic Instruction Code.",0
date ends
code segment
start:
mov ax,date
mov ds,ax
mov si,0
mov dh,7
mov dl,1
mov cl,2
call show_str
call letterc
mov dh,8
mov dl,1
mov cl,2
call show_str
mov ax,4c00h
int 21h
letterc:push ax
push si
push ds
letterc_s: mov al,ds:[si]
cmp al,0
je letterc_s1 ;遇到ascii=0则跳出对字符串的大小写转换操作
cmp al,61h
jb letterc_s0 ;如果小于a的ascii码则不对字符串操作
cmp al,86h
ja letterc_s0 ;如果大于z的ascii吗则不对字符串操作
and al,11011111b ;如果ascii码介于a和z的则转换为大写ascii码
letterc_s0: mov ds:[si],al
inc si
jmp short letterc_s
letterc_s1:
pop ds
pop si
pop ax
ret
show_str:
push ax
push es
push bp
push dx
push cx
push si ;保存相关寄存器
mov ax,0b800h
mov es,ax
mov ax,160
mul dh
mov dh,0
add ax,dx
add ax,dx
mov bp,ax ;设置字符串在显存的初始偏移地址es:bp
mov ah,cl
show_str_copy:
mov al,ds:[si]
mov cl,al
mov ch,0
jcxz show_str_retur
mov es:[bp],ax
add bp,2
inc si
jmp short show_str_copy ;将ds:si中的字符串复制到es:bp对应的显存中,复制以0为结束标志
show_str_retur:
pop si
pop cx
pop dx
pop bp
pop es
pop ax
ret
code ends
end start
;哪里有错误希望好心人不吝指出
date segment
db "Beginner's All-purpose Symbolic Instruction Code.",0
date ends
code segment
start:
mov ax,date
mov ds,ax
mov si,0
mov dh,7
mov dl,1
mov cl,2
call show_str
call letterc
mov dh,8
mov dl,1
mov cl,2
call show_str
mov ax,4c00h
int 21h
letterc:push ax
push si
push ds
letterc_s: mov al,ds:[si]
cmp al,0
je letterc_s1 ;遇到ascii=0则跳出对字符串的大小写转换操作
cmp al,61h
jb letterc_s0 ;如果小于a的ascii码则不对字符串操作
cmp al,86h
ja letterc_s0 ;如果大于z的ascii吗则不对字符串操作
and al,11011111b ;如果ascii码介于a和z的则转换为大写ascii码
letterc_s0: mov ds:[si],al
inc si
jmp short letterc_s
letterc_s1:
pop ds
pop si
pop ax
ret
show_str:
push ax
push es
push bp
push dx
push cx
push si ;保存相关寄存器
mov ax,0b800h
mov es,ax
mov ax,160
mul dh
mov dh,0
add ax,dx
add ax,dx
mov bp,ax ;设置字符串在显存的初始偏移地址es:bp
mov ah,cl
show_str_copy:
mov al,ds:[si]
mov cl,al
mov ch,0
jcxz show_str_retur
mov es:[bp],ax
add bp,2
inc si
jmp short show_str_copy ;将ds:si中的字符串复制到es:bp对应的显存中,复制以0为结束标志
show_str_retur:
pop si
pop cx
pop dx
pop bp
pop es
pop ax
ret
code ends
end start
;哪里有错误希望好心人不吝指出
评论次数(1) |
浏览次数(429) |
类型(汇编作业) |
收藏此文 |