汇编网首页登录博客注册
masmaster的学习博客
博客首页博客互动【做检测题】论坛求助

我的博客

个人首页 |  我的文章 |  我的相册 |  我的好友 |  最新访客 |  文章收藏 |  论坛提问 |  友情链接 |  给我留言  
图片载入中
文章收藏

[2010-09-02 21:19] 习题3.29

请写出一个把两个字符串合并的示例程序。

答:

;-----------------------------------------------------
;合并字符串
;将str1与str2合并,结果放在newstr
assume  cs:code,ds:data
data    segment
str1    db      'hello!,'
;指定编译地址,偏移值任意
        org     8h
str2    db      'world!'
;为新串预留空间
newstr  db      (($-offset str2)+(offset ...
阅读全文 | 评论次数(0) | 浏览次数(297) | 所属类型(汇编习题集)

[2010-09-02 17:09] 习题3.28

写一个程序片段,将字符串中的空格过滤掉。设字符串以0结尾。

答:
;子程序名:delblk
;功能:删除字符串中的20H字符。
;入口:DS:BX,指向含有空格字符串地址。
;出口:DS:BX,指向不含有空格字符地址。
;----------------------------------------------------
delblk  proc uses ax bx si
L0:     mov al,[bx]
        cmp al,0
        jz done
        cmp al,20h
        jz tim
       ...
阅读全文 | 评论次数(0) | 浏览次数(291) | 所属类型(汇编习题集)

[2010-09-02 16:05] 习题3.27

写一个程序片段, 统计字符串的长度。字符串以0结尾。

答:统计字符串长度,繁琐的方法是写一个循环,用一个寄存器做计数器。另一简单的方法,使用伪指令sizeof即可
用sizeof伪指令求字符串长度:
        mov cx,sizeof msg
用循环的办法求字符串长度:
        mov bx,0
L:      mov al,[bx]
        cmp al,0
        jz done
        inc bx
        jmp L
done:...
阅读全文 | 评论次数(0) | 浏览次数(289) | 所属类型(汇编习题集)

[2010-09-02 15:38] 习题3.26

写一个程序片段实现如下功能:把字符串中的小写字母变化为大写字母。字符串以0为结尾。

答:
;子程序名:toup
;功能:把小写字母变成大写字母其他字符不变
;入口:DS:BX,指向以0为结尾的字符串
;出口:DS:BX。

toup    proc
L:      mov al,[bx]
        cmp al,0
        jz ok
        cmp al,'a'
        jb jx
        cmp al,'z'
        ja jx
        sub al,20h
        mov byte ptr...
阅读全文 | 评论次数(0) | 浏览次数(288) | 所属类型(汇编习题集)

[2010-09-02 12:25] 习题3.25

写一个程序片段完成如下功能:把寄存器AL和BL中的位依次交叉,得到的结果存放到DX寄存器中。

答:

d:\MASM>type 25.asm
assume  cs:code
code    segment
start:
        mov al,0fh
        mov bl,0f0h
        mov dx,0
        call cross
        mov ah,4ch
        int 21h
;子程序cross
;入口参数AL,BL
;出口参数DX

cross   proc
        xor ah,a...
阅读全文 | 评论次数(0) | 浏览次数(301) | 所属类型(汇编习题集)

[2010-09-01 22:29] 习题3.24

写一个程序片段实现如下功能:一次重复四次寄存器AL中的每一位,得到的32位的结果存放到DX:AX寄存器中。

答:这题跟上题类似。

repet   proc
        mov ah,0
        xor dx,dx
        mov cx,9
L:      push cx
        mov bx,0
        mov cx,0
;
        rol al,1
        adc cx,0
        mov bx,cx
        shl bx,1
        add bx,cx
        shl ...
阅读全文 | 评论次数(0) | 浏览次数(270) | 所属类型(汇编习题集)

[2010-09-01 12:51] 习题3.23

写一个片段实现如下功能:一次重复寄存器AL中的每一位,得到16位的结果送至寄存器DX中。

答:

;子程序名:将AL每位重复2次结果存放至DX
;入口参数:AL
:出口参数:DX
;利用循环移位和带进位加法
;----------------------------------------------------
repet   proc
        mov ah,0
        xor bx,bx
        xor dx,dx
        mov cx,7          ;为什么cx=8出错?
L:      push cx        ...
阅读全文 | 评论次数(0) | 浏览次数(304) | 所属类型(汇编习题集)

[2010-09-01 12:32] 习题3.22

设一个32位有符号数存放在DX:AX中。请写一个求其补码的程序片段。

答:

d:\MASM>type a.asm
assume  cs:code,ds:data,ss:stack
data    segment
var1    dd      -12346789h       ;32位有符号数
        org     10h              ;
var2    dd      ?                ;结果存放这里
data    ends
stack   segment stack
        dw 128 dup (0)
sta...
阅读全文 | 评论次数(0) | 浏览次数(300) | 所属类型(汇编习题集)

[2010-09-01 11:37] 习题2.21

写出一个程序片段统计AX中置1位的个数

答:
;子程序名:count
;功能:统计AX中置1位的个数
;入口参数=AX
;出口参数=DX
;利用循环移位指令rol,对CF是否为1进行判断。
;----------------------------------------------------
count   proc
        mov cx,16
        mov dx,0
L:      rol ax,1
        push ax
        jc cf
        jmp next
cf:     inc dx
next: ...
阅读全文 | 评论次数(0) | 浏览次数(287) | 所属类型(汇编习题集)

[2010-09-01 10:55] 习题3.20

举例说明如何避免条件转移超出转移范围?

答:条件转移都是short型,范围在-126~+129之间。通常是前后40条指令左右。如果比较远的话, 可以考虑用两次跳转,如:
cmp ax,0
jz a      ;地址超范围了,用a作为跳板
a:jmp b...
阅读全文 | 评论次数(0) | 浏览次数(284) | 所属类型(汇编习题集)
页码数(16):  1  2  3  4  5  6  7  8  9  10   >>