一个三角X引发的“可视化”汇编编程
写了那个杨辉三角 我就想能不能用汇编去表达一下C语言呢或者通过对C语言的翻译来学习汇编呢
先发一些简单的吧
本人系自学初学 很多东西不明白 只能看到一些表面上的东西 很多原理性的东西还弄不清楚
发这个贴为的是大家讨论 希望新手有所收获 更希望大牛多给指导
那我们从Hello World!开始吧
在C语言中程序和效果图如下
程序代码:#include <stdio.h>
int main(void)
{
char str[128];
printf("Please input a string: ");
gets(str);
puts(str);
return 0;
}--
现在我们就用汇编来达到这个目的
楼主还看不懂反汇编代码 这个的反汇编代码光是个int 3就有无数个 嘎嘎
我们只是简单的实现与C程序同样的功能就OK了吧 呵呵
汇编的代码就效果图
程序代码:;#Mode=DOS
;MASMPlus 单文件代码模板 - 纯 DOS 程序
;;; 很遗憾DOS不支持中文字符串? 大牛们有什么办法吗?
assume cs:code, ds:data, ss:stack
stack segment
db 128 dup(?)
stack ends
data segment
PutStr db 'Please input a string: ', '$'
OutStr db 128
OutLen db ?
ActualStr db 128 dup ('$')
EndPrompt db 'Press any key to continue', '$'
data ends
code segment
start: ; Segment register initialize 段寄存器初始化
mov ax, stack
mov ss, ax
mov sp, 128
mov ax, data
mov ds, ax
; Input prompt 输入提示
lea dx, PutStr
mov ah, 09h
int 21h
; begin Input string and Output it 开始输入字符串并显示出来
lea dx, OutStr
mov ah, 0ah
int 21h
; Set the Cursor 2 row 23 column 设置光标于2行23列
mov ah, 02h
mov bh, 0
mov dh, 2
mov dl, 23
int 10h
; Output it 显示输入字符串
lea dx, ActualStr
mov ah, 09h
int 21h
; Carriage-Return Line-Feed 回车换行
call crlf
; Set Cursor in 3 row 0 column 光标置于3行0列
mov ah, 02h
mov bh, 0
mov dh, 3
mov dl, 0
int 10h
; Output End Prompt 输出结束提示
lea dx, EndPrompt
mov ah, 09h
int 21h
; View the result and Return DOS 查看结果并返回DOS
mov ah, 01h
int 21h
mov ah, 4ch
int 21h
; The function of Carriage-Return Line-Feed 回车换行
crlf: mov dl, 0dh
mov ah, 02h
int 21h
mov dl, 0ah
mov ah, 02h
int 21h
ret
code ends
end start--
看吧 其实没有什么汇编基础只要知道几个指令的功能 寄存器的作用 及不到4个中断功能
就能实现这个目的 以前对汇编存有极大的恐惧 迟迟不敢下手 看来是不应该的啦 呵呵。
有兴趣的朋友可以看下 并指出其中的不足 给出更好的方法。。。



