寒假汇编语言作业(5)
程序设计项目五
定义一个数据段如下:
data segment
db 'h12E332l@L#O*&^!88nI@cE$% %$T1O m33E44E55t y77O88u!()'
db '?'
data ends
注意:第一行字符串为待处理的数据,'?'为字符串结束符号。
设计程序完成如下操作:
(1)去掉除字母、空格、'!'之外的字符;
(2) 通过内存间的数据交换,将数据段中的字符串修改为'Hello!Nice to meet you!';
(3)在屏幕正中打印处理好后的数据。
完成程序后思考:
(1)如何设计程序,程序代码量最少;
(2)如何设计程序,程序执行速度最快;
(3)如何设计程序,使得程序具有通用性。
注意:
(1)'?'、'!'和空格分别假定为字符串的结束符、一句话的最后的标点和单词间的间隔符,都不属于干扰符号。
(2)这里的通用性是指:任意带有其他符号干扰的一组字符串都能够通过程序被处理为具有如下特点的英文段落:段落中只包含字母、空格、'!'三种符号。段落中的每句话都是以开头字母为大写,'!'为结束标点的句子。
感觉写的还是有点乱
参考程序:
1 assume cs:code 2 data segment 3 db 'h12E332l@L#O*&^!88nI@cE$% %$T1O m33E44E55t y77O88u!()' 4 db '?' 5 data ends 6 7 stack segment 8 dw 8 dup (0) 9 stack ends 10 11 code segment 12 start: 13 mov ax,data 14 mov ds,ax 15 mov ax,0b800h 16 mov es,ax 17 mov ax,stack 18 mov ss,ax 19 mov sp,10h 20 mov si,0 21 mov di,2140 22 mov bp,0 23 mov cx,1 ;默认大写开始 cx=1大写 cx=0小写 24 25 main_L: ;主循环 26 mov al,ds:[si] 27 mov ah,71h 28 cmp al,'?' 29 je ok_mL 30 cmp al,'!' 31 je do_gankan ;置位 32 cmp al,' ' 33 je pprint 34 or al,00100000b 35 cmp al,'a' 36 jb move_shuju ;清理不识别字符 37 cmp al,'z' 38 ja move_shuju 39 jcxz pprint ; 判断大小写 40 and al,11011111b 41 mov cx,0 42 43 pprint: ;打印,清理 44 call get_shuju 45 jmp print 46 47 go_next: 48 inc si 49 jmp main_L 50 51 ok_mL: 52 mov ax,4c00h 53 int 21h 54 55 do_gankan: 56 mov cx,1 57 jmp pprint 58 59 print: 60 mov es:[di],ax 61 add di,2 62 jmp go_next 63 64 move_shuju: 65 mov byte ptr ds:[si],0 66 jmp go_next 67 68 get_shuju: 69 mov byte ptr ds:[si],0 70 mov ds:[bp],al 71 inc bp 72 ret 73 74 code ends 75 end start