以下为《第9周 课后作业 任务1-用子程序求字符串中的长度》的无排版文字预览,完整内容请下载
第9周 课后作业
任务1-用子程序求字符串中的长度
在数据区中给定了用0结束的字符串。请补充完成子程序,求出字符串的长度(0之前的字符个数),并将之保存在0之后的字节中。(以下面程序数据区中给出的字符串,得到的长度为24/18H)。
assume cs:cseg, ds:dseg, ss:sseg
sseg segment stack
dw 100h dup (?)
sseg ends
dseg segment
db 'YanTai University 264005', 0
dseg ends
cseg segment
start: mov ax, dseg
mov ds, ax
mov ax, sseg
mov ss, ax
mov sp, 100h
mov bx, 0
call getLength
mov ax, 4c00h
int 21h
;子程某某:getLength
;功 能:计算从DS:bx开始到以0结束的字符串的长度,并保存到0的后面
;入口参数:DS和BX寄存器中保存字符串的起始地址
;出口参数:无
getLength proc
; 在这里写出你的代码
ret
getLength endp
cseg ends
end start
提示:(1)就目前学过的知识,此项目只要用好jcxz指令即可有效解决“是否读到0”的问题,并不需要拓展学习后面的内容;(2)此项目中的字符串和C语言中的字符串概念相同,注意字符'0'和数值0有区别。
代码
assume cs:cseg, ds:dseg, ss:sseg
sseg segment stack
dw 100h dup (?)
sseg ends
dseg segment
db 'YanTai University 264005', 0
dseg ends
cseg segment
start: mov ax, dseg
mov ds, ax
mov ax, sseg
mov ss, ax
mov sp, 100h
mov bx, 0
call getLength
mov ax, 4c00h
int 21h
;子程某某:getLength
;功 能:计算从DS:bx开始到以0结束的字符串的长度,并保存到0的后面
;入口参数:DS和BX寄存器中保存字符串的起始地址
;出口参数:无
getLength proc
mov ax,0 ;AX寄存器计数
s1:
mov ch,0
mov cl,ds:[bx] ;CX寄存器做判断条件
jcxz s2
inc ax
inc bx ;BX寄存器做指针
jmp s1
s2:
mov ds:[bx],al ;保存
ret
getLength endp
cseg ends
end start
运行结果
任务2 - 向显存中传入字符(即教材中实验9)
编程序,在屏幕的中间分别显示绿 内容过长,仅展示头部和尾部部分文字预览,全文请查看图片预览。 loop s
mov ax,4c00h
int 21h
main endp
col proc
push cx ;存放外循环的值
push si
mov ax,0
mov si,0
mov di,0
mov cx,16 ;内循环,16个字符
s1:
mov al,byte ptr ds:[di]
mov ah,dl
mov word ptr es:[bx+si],ax;存放字符值和属性值
inc si
inc si
inc di
loop s1
pop si
pop cx
ret
col endp
codesg ends
end start
[文章尾部最后300字内容到此结束,中间部分内容请查看底下的图片预览]
以上为《第9周 课后作业 任务1-用子程序求字符串中的长度》的无排版文字预览,完整内容请下载
第9周 课后作业 任务1-用子程序求字符串中的长度由用户“yblnau”分享发布,转载请注明出处