实验3 转移指令跳转原理及其简单应用编程
1
assume cs:code, ds:data data segment x db 1, 9, 3 len1 equ $ - x ; 符号常量, $指下一个数据项的偏移地址,这个示例中,是3 y dw 1, 9, 3 len2 equ $ - y ; 符号常量, $指下一个数据项的偏移地址,这个示例中,是9 data ends code segment start: mov ax, data mov ds, ax mov si, offset x ; 取符号x对应的偏移地址0 -> si mov cx, len1 ; 从符号x开始的连续字节数据项个数 -> cx mov ah, 2 s1:mov dl, [si] or dl, 30h int 21h mov dl, ' ' int 21h ; 输出空格 inc si loop s1 mov ah, 2 mov dl, 0ah int 21h ; 换行 mov si, offset y ; 取符号y对应的偏移地址3 -> si mov cx, len2/2 ; 从符号y开始的连续字数据项个数 -> cx mov ah, 2 s2:mov dx, [si] or dl, 30h int 21h mov dl, ' ' int 21h ; 输出空格 add si, 2 loop s2 mov ah, 4ch int 21h code ends end start
第一题
(1)
27
(2)
14
2
assume cs:code, ds:data data segment dw 200h, 0h, 230h, 0h data ends stack segment db 16 dup(0) stack ends code segment start: mov ax, data mov ds, ax mov word ptr ds:[0], offset s1 mov word ptr ds:[2], offset s2 mov ds:[4], cs mov ax, stack mov ss, ax mov sp, 16 call word ptr ds:[0] s1: pop ax call dword ptr ds:[2] s2: pop bx pop cx mov ah, 4ch int 21h code ends end start
第二题
(1)
Ax=s1的偏移地址
Bx=s2的偏移地址
Cx=s2的段地址
3
assume cs:code ds:data data segment x db 99, 72, 85, 63, 89, 97, 55 len equ $- x data ends code segment main proc start: mov ax,data mov ds,ax mov cx,len mov si,offset x s:mov al,[si] call printNumber call printSpace inc si loop s mov ax,4c00h int 21h main endp printNumber proc mov bl,10 div bl mov bh,ah mov ah,2 mov dl,al or dl,30h int 21h mov ah,2 mov dl,bh or dl,30h int 21h printNumber endp printSpace proc mov ah,2 mov dl,' ' int 21h ret printNumber endp code ends end start
4
assume cs:code, ds:data data segment str db 'try' len equ $ - str data ends code segment start: mov ax, data mov ds, ax mov cx, len mov ax, 0 mov si, ax mov bl, 0Ah mov bh,1 call printStr mov cx, len mov ax, 0 mov si, ax mov bl, 0Ch mov bh, 24 call printStr mov ah, 4ch int 21h printStr: mov al, bh mov dl, 0A0h mul dl mov di, ax mov ax, 0b800h mov es, ax print: mov al, ds:[si] mov es:[di], al mov es:[di+1], bl inc si add di, 2 loop print ret code ends end start
5
assume cs:code, ds:data data segment stu_no db '201983290540' len = $ - stu_no data ends code segment start: mov ax, data mov ds, ax mov di, 0 call print mov ah, 4ch int 21h print: mov ax, 0b800h mov es, ax mov si, 1 mov al, 24 ;24行 mov dl, 80 ;每行80个字符 mul dl ;24*80个字符 mov cx, ax ;24*80次 blue: ;打印蓝色 mov al, 17h ;颜色 mov es:[si], al ;填色 add si, 2 loop blue sub si, 1 ;指针回到最后一行 mov ax, 80 sub ax, len mov dl, 2 div dl mov dx, ax mov cx, dx call printStr mov cx, len printNumStr: mov al, ds:[di] mov ah, 17h mov word ptr es:[si], ax inc di add si, 2 loop printNumStr mov cx, dx call printStr ret printStr: mov al, '-' mov ah, 17h mov word ptr es:[si], ax add si, 2 loop printStr ret code ends end start