实验9
t1
; 在屏幕上输出内存单元中的十进制两位数 assume cs:code, ds:data data segment db 12 db 0,0 ; 前一个字节用于保存商,后一个字节用于保存余数 data ends code segment start: mov ax, data mov ds, ax ; 补全指令,使得ds <-- data段地址 mov ah,0 mov al,ds:[0] ; ax <-- data段字节单元的被除数12 mov bl,10 div bl mov ds:[1],al ; 补全代码,让商保存到data段注释中指定的单元 mov ds:[2],ah ; 补全代码,让余数保存到data段注释中指定的单元 mov ah,2 mov dl,ds:[1] ; 补全代码,使得dl <-- data段中保存的商的字节单元数值 add dl, 30h ; 补全代码,使得dl中的数值转换为数字字符 int 21h mov ah,2 mov dl,ds:[2] ; 补全代码,使得dl <-- data段中保存余数的字节单元数值 add dl, 30h ; 补全代码,使得dl中的数值转换为数字字符 int 21h mov ax,4c00h int 21h code ends end start
t2
assume cs:code, ds:data, ss:stack data segment db 12, 35, 96, 55, 67 data ends stack segment dw 0,0 stack ends code segment start: mov ax, data mov ds, ax mov ax, stack mov ss, ax mov sp, 0005h mov cx, 5 mov si, 0 s1: push cx mov cx, 2 mov di, 0 mov ah, 0; mov al, [si] mov bl, 10 div bl push ax s2: mov ah, 2 mov dl,ss:[di] add dl, 30h int 21h add di, 1 loop s2 inc si pop ax pop cx mov ah, 2 mov dl, ' ' int 21h loop s1 mov ax, 4c00h int 21h code ends end start
用了下栈,出了点问题
t3
assume ds:data, cs:code data segment db 'welcome to masm!' db 2H,24H,71H ;字符串属性值 data ends code segment start: mov ax,data mov ds,ax ;字符串及属性值所在段的段地址送入ds mov ax,0b800H mov es,ax ;80×25彩色字符模式显示缓冲区段地址送入es mov si, 0 mov di, 30h mov cx, 16 s: mov al, ds:[si] mov byte ptr es:06E0h[di], al inc di mov al, ds:[10h] mov byte ptr es:06E0h[di], al inc di inc si loop s mov si, 0 mov di, 30h mov cx, 16 s1: mov al, ds:[si] mov byte ptr es:0780h[di], al inc di mov al, ds:[11h] mov byte ptr es:0780h[di], al inc di inc si loop s1 mov si, 0 mov di, 30h mov cx, 16 s2: mov al, ds:[si] mov byte ptr es:0820h[di], al inc di mov al, ds:[12h] mov byte ptr es:0820[di], al ;繁版截图出现问题的地方 inc di inc si loop s2 mov ax,4c00h int 21h code ends end start
简洁后:
assume ds:data, cs:code, ss:stack data segment db 'welcome to masm!' db 2H,24H,71H ;字符串属性值 data ends stack segment db 0 stack ends code segment start: mov ax,data mov ds,ax ;字符串及属性值所在段的段地址送入ds mov ax,0b800H mov es,ax ;80×25彩色字符模式显示缓冲区段地址送入es mov ax, stack mov ss, ax mov sp, 2 mov bx, 06E0h; 来控制行 mov bp, 10h; 来控制色彩 mov cx, 3 s0: push cx mov si, 0 mov di, 30h mov cx, 16 s: mov al, ds:[si] mov byte ptr es:[bx][di], al inc di mov al, ds:[bp] mov byte ptr es:[bx][di], al inc di inc si loop s add bx, 0a0h inc bp pop cx loop s0 mov ax,4c00h int 21h code ends end start
第一张图为繁版,第二张为简版
繁版出现问题的原因是:我在设置色彩属性时0820h 没有加h,导致色彩不对。
总结:
当知识掌握的不牢固的时候,debug是一件很痛苦的事情。
“你看那条凄惶的狗,东探探,西望望,冀图讨要,就是不肯锻炼了筋骨去猎食!”