汇编语言 第三版 王爽 实验10-1 编写子程序 之 显示字符串

来源:互联网 发布:新海典软件怎么用 编辑:程序博客网 时间:2024/06/06 04:02

题目:



注意事项:

1.计算偏移地址的时候,以bx作为偏移量,ax不行

例如 es:[bx+si]  而不是 es:[ax+si]

2.子程序开始的时候把所有的寄存器入栈,方便接下来使用,结束的时候出栈

3.计算数组偏移地址的时候,用mul

4.参考博客

代码:

assume cs:code,ds:data,ss:stackdata segmentdb 'welcome to masm!',0data endsstack segmentdw 8 dup (0)stack endscode segmentstart:  mov dh,8mov dl,3      ;第八行,第三列mov cl,2      ;颜色mov ax,datamov ds,ax     ;ds指向数据段mov si,0call show_strmov ax,4c00hint 21hshow_str:push dxpush cxpush axpush sspush si    ;子程序开始所有寄存器入栈mov ax,0B800hmov es,ax    ;es指向显示的起始地址;计算行偏移量mov al,0a0h ;160个字节一行dec dh    ;行号减一,00 - dh-1  共dh行mul dh      ;相乘  结果放在ax里mov bx,ax   ;偏移量mov al,2   ;一列两个字符dec dl      ;列号减一,00 -dl-1 共dl列mul aladd bx,ax  ;偏移地址计算完成mov di,0     ;di字符读取时候每次的偏移 每次加1mov si,0mov al,cl   ;颜色暂时保存在al里 线面cx需要用到s1:mov ch,0    ;置0mov cl,ds:[di]  ;字符放在cl里jcxz okmov ch,al   mov es:[bx+si],cx  ;字符颜色一起放入显示位置add si,2inc dijmp short s1ok: pop si    ;子程序开始所有寄存器入栈pop sspop axpop cxpop dxretcode endsend start

结果:

0 0