您的位置:首页 > 其它

第十三章实验13(3)

2009-09-11 09:33 113 查看
题目:下面的程序,分别在屏幕上的第2、4、6、8行显示4句英文诗,补全程序。

assume cs:codesg
codesg segment
    s1: db 'Good,better,best,','$'
    s2: db 'Never let it rest,','$'
    s3: db 'Till good is better,','$'
    s4: db 'And better,best.','$'
    s: dw offset s1,offset s2,offset s3,offsest s4
    row: db 2,4,6,8
    
    start:
    mov ax,cs
    mov ds,ax
    mov bx,offset s
    mov si,offset row
    mov cx,4
    
  ok:
    mov bh,0
    mov dh,__(1)_____
    mov dl,0
    mov ah,2
    int 10h
    
    mov dx,___(2)____
    mov ah,9
    int 21h
          
    ___(3)____
    ___(4)____
    loop ok
    
    mov ax,4c00h
    int 21h
    
codesg ends
end start


分析:在(1)处很显然的是要拿到行号,因为dh和dl中存放的分别是行号和列号,关键就是如何拿到行号?由上面的程序知道行号是定义在了row中的,然后把row的位移给了si,所以可以通过ds:[si]拿到行号送给dh。对于(2)来说,首先要清楚一点ds:dx是指向要显示的字符串的首地址,所以dx处肯定是把要显示的字符串的首地址给dx。而我们已经知道bx中存放着各个要显示字符串的首地址,所以通过ds:[bx]获取各个字符串的首地址,把ds:[bx]的值给dx。(3)和(4)很显然的是把si和bx增加相应的值以便于下一次循环的正常运行。

补充后的代码如下:

assume cs:codesg
codesg segment
    s1: db 'Good,better,best,','$'
    s2: db 'Never let it rest,','$'
    s3: db 'Till good is better,','$'
    s4: db 'And better,best.','$'
    s: dw offset s1,offset s2,offset s3,offsest s4
    row: db 2,4,6,8
    
    start:
    mov ax,cs
    mov ds,ax
    mov bx,offset s
    mov si,offset row
    mov cx,4
    
  ok:
    mov bh,0
    mov dh,ds:[si]
    mov dl,0
    mov ah,2
    int 10h
    
    mov dx,ds:[bx]
    mov ah,9
    int 21h
          
    add bx,2      
    inc si
    loop ok
    
    mov ax,4c00h
    int 21h
    
codesg ends
end start
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: