;2011/06/15
;名称:dtoc
;功能:将word型数据转变为表示十进制数的字符串,字符串以0为结尾符。
;参数:(ax)=word型数据
; ds:si指向字符串的首地址
;返回:无
;
;编程,将数据12666以十进制的形式在屏幕的8行3列,用绿色显示出来。在显示时调用本次实验的第一个子程序show_str。
stack segment
db 128 dup (0)
stack ends
data segment
db 10 dup (0)
data ends
code segment
assume ss:stac...
- [silentpassing] 可以通过 mov bh, 0 mov ah, 3 int 10h 得到 06/23 16:17
- [silentpassing] "对于2号功能:(dh)、(dl)=字符串在屏幕上显示的行、列位置"这个结论怎么得到的? 06/23 16:00
- [silentpassing] 定义的栈段在程序结束前的具体存储: 0 1 2 3 45 67 89 AB C 06/15 06:19
- [silentpassing] 在cmd的debug中用g命令即可看到运行结果,直接在cmd中运行该程序,可能看不到结果。建议学习汇 06/14 15:12
- [silentpassing] jmp short、所有条件转移以及循环指令都是段内短转移,段内短转移的跳转范围为-128~127, 06/13 22:40
- [silentpassing] 注意ok之后的是dec bx,而且所填指令要和loop有关,而在loop执行前一个操作是cx减1,如 06/13 21:38
- [silentpassing] mov al,[si+bx] and al,11011111B mov [si+bx],al 06/12 20:35
- [游客] 装个实dos,或是虚拟机下装个实dos。 11/17 11:29
- [silentpassing] 谢谢你的回答 我今天看到第四章了 呵呵 是的 我写的是在debug下输入的 10/28 13:13
- [游客] 你输入的代码是在debug下输入的,它默认是十六进制,所以h省略。 我们常用的是十进制,也就是默认 10/28 10:48
[2011-06-15 20:19] 汇编语言 实验10.3 数值显示
阅读全文 |
评论次数(0) |
浏览次数(880) |
所属类型(默认类型)
[2011-06-15 16:38] 实验10.2 解决除法溢出问题
;名称:divdw
;功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
;参数:(ax)=dword型数据的低16位
; (dx)=dword型数据的高16位
; (cx)=除数
;返回:(dx)=结果的高16位,(ax)=结果的低16位
; (cx)=余数
;
;公式:X/N = int(H/N)*65536 + [rem(H/N)*65536+L]/N
;X: 被除数,范围:[0, FFFFFFFFH]
;N: 除数,范围:[0, FFFFH]
;H: X高16位,范围:[0, FFFFH]
;L...
;功能:进行不会产生溢出的除法运算,被除数为dword型,除数为word型,结果为dword型。
;参数:(ax)=dword型数据的低16位
; (dx)=dword型数据的高16位
; (cx)=除数
;返回:(dx)=结果的高16位,(ax)=结果的低16位
; (cx)=余数
;
;公式:X/N = int(H/N)*65536 + [rem(H/N)*65536+L]/N
;X: 被除数,范围:[0, FFFFFFFFH]
;N: 除数,范围:[0, FFFFH]
;H: X高16位,范围:[0, FFFFH]
;L...
阅读全文 |
评论次数(0) |
浏览次数(806) |
所属类型(默认类型)
[2011-06-14 14:56] 实验9 根据材料编程
编程:在屏幕中间分别显示绿色、绿底红色、白底蓝色的字符串'welcome to masm!'。
程序如下:
data segment
STR db 'welcome to masm!'
LEN equ ($-STR)
data ends
code segment
assume ds:data, cs:code
start:
mov ax, data
mov ds, ax
mov ax, 0b800h
mov es, ax
mov di, 12*160+64 ;for puting the string...
程序如下:
data segment
STR db 'welcome to masm!'
LEN equ ($-STR)
data ends
code segment
assume ds:data, cs:code
start:
mov ax, data
mov ds, ax
mov ax, 0b800h
mov es, ax
mov di, 12*160+64 ;for puting the string...
阅读全文 |
评论次数(1) |
浏览次数(1148) |
所属类型(默认类型)
[2011-06-14 12:17] 实验8 分析一个奇怪的程序
分析下面的程序,在运行前思考:这个程序可以正确返回吗?
运行后再思考:为什么是这种结果?
通过这个程序加深对相关内容的理解。
assume cs:code
code segment
mov ax, 4c00h
int 21h
start:
mov ax, 0
s:
nop
nop
mov di, offset s
mov si, offset s2
mov ax, cs:[si]
mov cs:[di], ax
s0:
jmp short s
s1:
...
运行后再思考:为什么是这种结果?
通过这个程序加深对相关内容的理解。
assume cs:code
code segment
mov ax, 4c00h
int 21h
start:
mov ax, 0
s:
nop
nop
mov di, offset s
mov si, offset s2
mov ax, cs:[si]
mov cs:[di], ax
s0:
jmp short s
s1:
...
阅读全文 |
评论次数(0) |
浏览次数(843) |
所属类型(默认类型)
[2010-12-03 16:55] 个人易忘点记录
1.dec和inc不影响CF标志位。(不知为什么,据说是硬件设计时规定的)
2.有必要好好研究一下各种不常见的指令对标志寄存器的影响;
3.mov指令不能修改CS,IP的值,但转移指令可以;
4.小心段寄存器作为操作数的情况,如and ax,ds和mov ds,1223h都是错误的;
5.mul和div的操作数不能是立即数;
6.目的操作数不能是立即数;
7.移位操作中的第二个操作数只能是1或cl;
8.sp不能作为间接寻址之寄存器,这样使用[sp]是错误的;
9.在间接寻址时不能同时出现si和di或bx和bp,像[bx+bp]是错误的;
...
2.有必要好好研究一下各种不常见的指令对标志寄存器的影响;
3.mov指令不能修改CS,IP的值,但转移指令可以;
4.小心段寄存器作为操作数的情况,如and ax,ds和mov ds,1223h都是错误的;
5.mul和div的操作数不能是立即数;
6.目的操作数不能是立即数;
7.移位操作中的第二个操作数只能是1或cl;
8.sp不能作为间接寻址之寄存器,这样使用[sp]是错误的;
9.在间接寻址时不能同时出现si和di或bx和bp,像[bx+bp]是错误的;
...
阅读全文 |
评论次数(0) |
浏览次数(902) |
所属类型(默认类型)
[2010-11-22 10:48] 实验17 编写包含多个功能子程序的中断例程
下面的程序是我自己写的,但是受机器限制无法调试,如有不妥,请不吝赐教!
assume cs:code
code segment
start:
mov ax,0
mov es,ax
mov di,200h
mov ax,cs
mov ds,ax
mov si,offset int7c
mov cx,offset int7cend-offset int7c
cld
rep movsb
mov word ptr es:[7ch*4],200h
mov word ptr es:[7...
assume cs:code
code segment
start:
mov ax,0
mov es,ax
mov di,200h
mov ax,cs
mov ds,ax
mov si,offset int7c
mov cx,offset int7cend-offset int7c
cld
rep movsb
mov word ptr es:[7ch*4],200h
mov word ptr es:[7...
阅读全文 |
评论次数(0) |
浏览次数(890) |
所属类型(默认类型)
[2010-11-20 22:37] 17.3 字符串的输入子程序详解
第一遍看的时候有点晕,将两个程序换个顺序依次理解 写下思考过程 呵呵 以下时鄙人的个人分析,如有不妥,请不吝赐教!
;子程序:字符的入栈、出栈和显示
;参数说明:(ah)=功能号,0表示入栈,1表示出栈,2表示显示
;ds:si指向字符栈空间
;对于0号功能:(al)=入栈字符
;对于1号功能:(ah)=返回的字符
;对于2号功能:(dh)、(dl)=字符串在屏幕上显示的行、列位置
;接受字符串
getstr:
push ax ;将子程序用到的寄存器入...
;子程序:字符的入栈、出栈和显示
;参数说明:(ah)=功能号,0表示入栈,1表示出栈,2表示显示
;ds:si指向字符栈空间
;对于0号功能:(al)=入栈字符
;对于1号功能:(ah)=返回的字符
;对于2号功能:(dh)、(dl)=字符串在屏幕上显示的行、列位置
;接受字符串
getstr:
push ax ;将子程序用到的寄存器入...
阅读全文 |
评论次数(2) |
浏览次数(1234) |
所属类型(默认类型)
[2010-11-20 12:47] 检测点 17.1
“在int 16h中断例程中,一定有设置IF=1的指令。”这种说法对吗?
对,在16h号中断中还要响应9号中断,并且还有中断结束前标志寄存器的还原。...
对,在16h号中断中还要响应9号中断,并且还有中断结束前标志寄存器的还原。...
阅读全文 |
评论次数(0) |
浏览次数(871) |
所属类型(默认类型)
[2010-11-19 21:11] 实验16 编写包含多个功能子程序的中断例程
assume cs:code,ss:stack
stack segment
db 128 dup (0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,128
mov ax,cs
mov ds,ax
mov si,offset int7c
mov ax,0
mov es,ax
mov di,200h
mov cx,offset int7cend-offset int7c
cl...
stack segment
db 128 dup (0)
stack ends
code segment
start:
mov ax,stack
mov ss,ax
mov sp,128
mov ax,cs
mov ds,ax
mov si,offset int7c
mov ax,0
mov es,ax
mov di,200h
mov cx,offset int7cend-offset int7c
cl...
阅读全文 |
评论次数(0) |
浏览次数(946) |
所属类型(默认类型)
[2010-11-18 23:02] 检测点16.2
mov ax,data
mov es,ax
PS:实验证明,应该填上面两条指令,但是为什么不是ds?解释: 在程序的第一行已将数据段与段寄存器es关联了。...
mov es,ax
PS:实验证明,应该填上面两条指令,但是为什么不是ds?解释: 在程序的第一行已将数据段与段寄存器es关联了。...
阅读全文 |
评论次数(0) |
浏览次数(891) |
所属类型(默认类型)
『 查看更多文章 』