汇编程序编写和提高

2026/4/23 6:01:21

第四次实验

汇编程序编写和提高

1、编写一个程序,实现复制字符串的功能,并将复制的字符串正序倒序显示出来。 流程图:

程序如下:

DATAS SEGMENT

string_a db 'the future is beautiful';要操作的字符串 count equ $-offset string_a;把字符串的长度存入count

data1 db 'the zhengxu is:','$';输出正序是 data2 db 'the fanxu is:','$' ;输出反序是 DATAS ENDS

STACKS SEGMENT

string_b db 100 dup(?);建栈段存放复制的字符串 STACKS ENDS

CODES SEGMENT

ASSUME CS:CODES,DS:DATAS,SS:STACKS START:

MOV AX,DATAS

MOV DS,AX;把datas的段地址分别给DS,ES mov es,ax

lea si,string_a;取string_a的偏移地址给si lea di,string_b;取string_b的偏移地址给di

mov cx,count;把字符串长度给cx,决定循环的次数

Cld;DF置零,使DI,SI自增

rep movsb;把string_a里的字符串复制到string_b,循环次数为 ;CX

mov cx,count;把count赋给CX,决定输出正序循环次数 lea dx,data1;输出data1里的字符 mov ah,09 int 21h

xor di,di;DI置零 output1:

mov dl,[string_b+di];把string_b偏移地址给DL mov ah,02h

int 21h;输出数据段string_b里的一个字符 inc di;DI自增,指向下一个字节 loop output1;循环输出 mov cx,count;CX重新获值

lea dx,data2;把data2的偏移地址赋给DX mov ah,09

int 21h ;输出提反序输出的提示字符 output2:

dec di;上一次循环DI指向要输出字符串的下一个字节,先自减, ;使他指向最后一个字符 mov dl,[string_b+di]

mov ah,02

int 21h;输出反序的字符串 loop output2

MOV AH,4CH INT 21H;结束dos CODES ENDS

END START;程序结束

运行结果:

过程中有几次语法错误,比如直接 MOV DI,STRING_B,提示错误,不能直接把数据段的偏移地址赋给DI,应该用LEA。

百度得知:LEA为硬指令,在程序执行阶段得出偏移地址,offset是伪指令,在编译阶段得出偏移地址。论速度的话,offset比LEA快得多,但是,灵活性和复杂度,offset远不如LEA。


汇编程序编写和提高.doc 将本文的Word文档下载到电脑
搜索更多关于: 汇编程序编写和提高 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219